用相似的方法,这段代码能将你的屏幕变成系统定义的标准的“绿色背景”:
public class MyActivity extends Activity {
public void onStart() {
super.onStart();
setTheme(android.R.style.Theme_Black);
} }
对于不同的语言和设置支持不同的资源
你可以根据产品界面语言以及硬件配置设置不同的资源。注意,虽然你可以包含 不同的字串,布局以及其他资源,但开发包(SDK)不会给你显式的方法去指定 不同的资源去加载。Android检测你的硬件以及位置信息选择合适的设置去加载。
用户可以到设备上的设置界面去选择不同的语言。
要包含不同的资源,在同一目录下创建并行的文件夹,在每个文件夹后加上合适 的名字,这个名字能表明一些配置信息(如语言,原始屏幕等等)。例如,这里 的项目字符串文件一个是英文版的,另一个是法文版的:
MyApp/
res/
values-en/
strings.xml
values-fr/
strings.xml
Android支持不同类型的修饰语,并可以加多条在文件夹名的后面, 修饰语之
间以破折号分开。例如:一个绘图资源类指定全部配置名称命名会像这样:
MyApp/
res/
drawable-en-rUS-port-160dpi-finger-keysexposed-qwerty-dpa d-480x320/
更典型的,你可以仅仅指定部分特定的配置选项。只要保证所有的数值都是按顺 序排列:
MyApp/
res/
drawable-en-rUS-finger/
drawable-port/
drawable-port-160dpi/
drawable-qwerty/
修饰语 值
语言 两个小写字母 ISO 639-1。例如: en, fr, es
地区 两个大写字母加上一个小写字母'r' ISO 3166-1-alpha-2。 例 如: rUS, rFR, rES
屏幕方向 port, land, square ?
屏幕像素 92dpi, 108dpi, 等等。
触摸屏类型 notouch, stylus, finger
键盘是否有效 keysexposed, keyshidden
基本文本输入 模式
nokeys, qwerty, 12key
无触摸屏的主 要
导航模式
notouch, dpad, trackball, wheel
屏幕分辨率
320x240, 640x480, 等等。大分辨率需要开始指定。
这个列表不包含一些特殊的参数,如载体,商标,设备/硬件,制造商。任何应 用程序需要知道的信息都在资源修饰语里有说明。
这里有一些通用的关于资源目录的命名指导:
各个变量用破折号分开 (每个基本的目录名后跟一个破折号)
变量大小写敏感(其大小写法必须始终一致)
例如,
o 一个drawable 的目录必须命名为 drawable-port, 而不是 drawable-PORT。
o 你不能有两个目录命名为 drawable-port 以及
drawable-PORT, 甚至故意将"port" 和 "PORT"指为不同的参数也 不可以。
一个式子里同一个类型修饰语中只有一个值是有效的(你不能指定像这样 drawable-rEN-rFR/)
你可以指定多个参数去定义不同的配置,但是参数必须是上面表格里的。
例如, drawable-en-rUS-land 意思在US-English的机器里载入风 景视图。
Android会寻找最适合当前配置的目录,这会在下面描述
表格里所列的参数是用来打破平衡以防止多重路径限制。 (看下面的例 子)
所有目录,无论是限制的,还是不限制的,只要在 res/ 目录下.一些目 录是不能嵌套的(这样 res/drawable/drawable-en是不可以的)
所有的资源在被代码引用中最好都使用简单的、不加修饰的名字,如果一 个资源这样命名:
MyApp/res/drawable-port-92dp/myimage.png 它将这样被引用:
R.drawable.myimage (code) @drawable/myimage (XML)
Android 如何找到最合适的目录
Android将会挑出哪些基本资源文件在运行时会被使用,这依靠当前的配置。选
择过程如下:
1. 删去一些和当前设备配置不符合的资源。例如,如果屏幕的像素是 108dpi,这可以删除 MyApp/res/drawable-port-92dpi/.
2. MyApp/res/drawable/myimage.png 3. MyApp/res/drawable-en/myimage.png 4. MyApp/res/drawable-port/myimage.png
5. MyApp/res/drawable-port-92dpi/myimage.png
6. 挑出一些最经常符合配置的资源。例如,如果我们的地区是 en-GB, 方
向是 port,那我们有两个符合配置的选项:
MyApp/res/drawable-en/ 和 MyApp/res/drawable-port/. 这
个目录 MyApp/res/drawable/ 可以被删除了,因为当另外一个有一 次匹配正确,而它没有。
7. MyApp/res/drawable/myimage.png 8. MyApp/res/drawable-en/myimage.png 9. MyApp/res/drawable-port/myimage.png
10. 根据配置的优先级选取最终适合的文件,它们按顺利被排列在上面的表格 里。更确切得说,语言匹配比方位匹配更重要, 所以我们可以通过选择语 言文件来平衡, MyApp/res/drawable-en/.
11. MyApp/res/drawable-en/myimage.png 12. MyApp/res/drawable-port/myimage.png
术语
资源系统将一系列分散内容集合在一起形成最终的完整的资源功能,去帮助我们 了解整个系统。这里有一些核心概念以及组件的概要说明,你在开发中将可能使 用到:
最终文件: 应用程序的独立的数据包。这包含所有从java程序编译成的目标文
件,图像 (例如PNG图片), XML文件等等。这些文件以一种特定的方式组织
在一起,在程序打包最后时,它们被打包成一个独立的ZIP文件。
aapt: Android最终文件打包工具。这个工具产生最终程序的ZIP文件。除了将 最终的元数据文件打包在一起,它也解析资源定义到最终的二进制数据里。
资源表:aapt工具产生的特殊的文件,描述了所有在程序/包里的资源。这个文件 可以通过资源类来访问;它不能直接和应用程序接触。
资源: 资源表里一条记录描述的是单一的命名值。大体上, 资源分成两种:基本 的和包装的.
资源标识符: 在资源表里所有的资源都被唯一的整数标识着。所有的代码中(资 源描述,XML 文件,Java源代码)你可以直接使用符号名代替真实的整数数值。
基本资源: 所有基本资源都可以被写成一个简单的字串,使用一定的格式可以描 述资源系统里各种不同的基本类型: 整数,颜色,字串,其他资源的引用,等 等。像图片以及XML描述文件这些复杂资源,被以基本字串资源储存,它们的 值就是相关最终数据文件的路径。
包装资源: 有一种特殊类型的资源,不是简单的字符串,而是有一个随意的名字
资源引用 这份文档提供了不同类型资源的详细列表,并提供了如何在Java代