你可以根据 UI 语言或者设备上的硬件配置,为你的产品提供不同的资源。注意,尽管你可以包 含不同的字符串、布局和其他资源,然而 SDK 没有方法供你指定加载哪一个替换资源。Android 检测关于硬件和未知的适当配置,然后适当加载。用户可以使用设备上的设置面板选择替换语言 设置。
为了包含替换资源,需要创建平行的资源文件夹,而文件夹的名字后面要使用限定符表示它要应 用的配置(语言、屏幕方向等等)。例如,下面的工程包含了字符串资源,一个用于英语,而另 外一个用于法语:
Android 支持几种类型的限定符,每一个都有不同的值。把它们连接在资源文件夹名称的后面,
使用短横线隔开。你可以为每一个文件夹名称添加多个限定符,但是它们必须按照这里列出的顺 序排列。例如,一个包含 drawable 资源的文件夹,对于一个完整详细的配置,可能看起来像:
} }
public class MyActivity extends Activity
public void onStart() { super.onStart();
setTheme(android.R.style.Theme_Black);
} }
MyApp/
res/
values-en/
strings.xml values-fr/
strings.xml
MyApp/
res/
更典型的是,你只需指定一些特定的要定义资源的配置选项。你可以放弃完整列表中的任何值,
但同时要保证剩下的值仍然保持列表中的顺序。
表 2 列举了合法的限定符目录名称,按优先级排序。下表中列举在上面的限定符比下面的具有 更高的优先级,如同Android 如何查找最匹配的目录中所描述的那样。
表 2
values-en/
drawable-en-rUS-port-160dpi-finger-qwerty-dpad-480x320/
MyApp/
res/
drawable-en-rUS-finger/
drawable-port/
drawable-port-160dpi/
drawable-qwerty/
限定符 QualifierQualifierQualifierQualifier 值 ValuesValuesValuesValues
移动国家码 MCC 和移动 网络码 MNC
手机设备 SIM 卡上的移动国家码和移动网络码。比如 mcc310-mnc004(美国,Verizon 品牌);mcc208-mnc00(法国, Orange 品 牌);mcc234-mnc00(英国,BT 品牌).
如果这个设备使用一个无线连接(GSM 电话),则 MCC 来自 SIM 卡,而 MNC 来自该设备将要附着的网络。你有时会仅使用 MCC,
例如包含特定国家合法资源在您的应用程序中。如果您的应用程序 指定了 MCC/MNC 组合的资源,这些资源仅在 MCC 和 MNC 都匹 配的时候才能使用。
语言和区域 Language and region
两个字母的ISO 639-1语言码和ISO 3166-1-alpha-2 区域码 (以"r"
为前缀)。比如en-rUS, fr-rFR, es-rES.
这个代码是大小写敏感的:语言码是小写字母,国家码是大写字母。
你不能单独指定一个区域,但是你可以单独指定一个语言,比如en,
fr, es, zh.
屏幕方向 Screen orientation
纵向,横向,正方形(port, land, square)
屏幕像素密度 Screen pixel density
92dpi, 108dpi 等. 当 Android 选择使用哪个资源时,它对屏幕 像素密度的处理和其它限定符不同。在文章后面描述的步骤 1Android 如何查找最匹配的目录中,屏幕密度总被认为是匹配的。
在步骤 4 中,如果被考虑的限定符是屏幕密度,Android 将选择在 那个位置的最佳匹配,而无需继续步骤 5。
触摸屏类型 Touchscreen type
非触摸式,触摸笔,手指(notouch, stylus, finger)
键盘可用方式 Whether the keyboard is available to the user
外在键盘,隐藏键盘,软键盘(keysexposed, keyshidden, keyssoft)
如果你的应用程序有一个特定的资源只能通过软件盘使用,则使用 keyssoft 值,如果没有keyssoft 资源可用(只有
keysexposed 和 keyshidden)并且该设备显示了一个软键 盘,那么系统将使用keysexposed 资源。
首选文本输入方法 Primary text input method
不支持按键,标准键盘,12 键(nokeys, qwerty, 12key)
首选非触摸式导航方法 Primary
non-touchscreen navigation method
不支持导航,滑板,跟踪球,滚轮(nonav, dpad, trackball, wheel)
屏幕分辨率 Screen dimensions
320x240, 640x480, 等. 更大的分辨率必须先被指定。
SDK 版本 SDK version 设备支持的 SDK 版本,比如v3。Android1.0 SDK 是
v1
,1.1SDK 是v2,1.5SDK 是v3。这个列表不包含设备特有的参数比如载波,品牌,设备/硬件,或者制造商。所有应用程序需要 知道的设备信息均通过上表中的资源限定符编码。
所有资源目录,许可的和未经许可的,都存放在res/目录下。下面是一些关于许可的资源目录 名称的指导原则:
� 你可以指定多个限定符,用破折号分开。比如,drawable-en-rUS-land会被应用在 美国英语的横向手机设备中。
� 限定符必须符合表 2 中列举的顺序。比如:
正确的:values-mcc460-nokeys/
错误的:values-nokeys-mcc460/
� 限定符的值大小写敏感。比如一个纵向特定的drawable目录必须命名为 drawable-port,不可以是drawable-PORT或drawable-Port。
� 每个限定符类型仅支持一个值。比如,如果你想使用为法国和西班牙使用相同的 drawable文件,你得需要两个资源目录,如drawable-rES/和drawable-rFR/,
包含相同的文件。你不能使用一个名为 drawable-rES-rFR 的目录。
� 限定符不能嵌套使用。比如,你不能使用res/drawable/drawable-en。