Android 替换资源(为了可替换的资源和配置)Alternate Resources

本帖最后由 Celine 于 2012-11-25 03:12 编辑

你可以根据UI 语言或者设备上的硬件配置,为你的产品提供不同的资源。

注意,尽管你可以包含不同的字符串、布局和其他资源,然而SDK 没有方法供你指定加载哪一个替换资源。

Android 检测关于硬件和未知的适当配置,然后适当加载。

用户可以使用设备上的设置面板选择替换语言设置。

为了包含替换资源,需要创建平行的资源文件夹,而文件夹的名字后面要使用限定符表示它要应用的配置(语言、屏幕方向等等)。

例如,下面的工程包含了字符串资源,一个用于英语,而另外一个用于法语:MyApp/ res/ values-en/ strings.xml values-fr/ strings.xmlAndroid 支持几种类型的限定符,每一个都有不同的值。把它们连接在资源文件夹名称的后面,使用短横线隔开。

你可以为每一个文件夹名称添加多个限定符,但是它们必须按照这里列出的顺序排列。

例如,一个包含drawable 资源的文件夹,对于一个完整详细的配置,可能看起来像:MyApp/ res/ values-en/ drawable-en-rUS-port-160dpi-finger-qwerty-dpad-480x320/更典型的是,你只需指定一些特定的要定义资源的配置选项。

你可以放弃完整列表中的任何值,但同时要保证剩下的值仍然保持列表中的顺序。MyApp/ res/ drawable-en-rUS-finger/ drawable-port/ drawable-port-160dpi/ drawable-qwerty/表列举了合法的限定符目录名称,按优先级排序。

下表中列举在上面的限定符比下面的具有更高的优先级,如同 Android 如何查找最匹配的目录中所描述的那样。

[table]
[tr][td=166] 限定符 Qualifier [/td][td=412]值 Values[/td][/tr]
[tr][td=166]移动国家码 MCC 和移动 网络码 MNC[/td][td=412]手机设备 SIM 卡上的移动国家码和移动网络码。比如 mcc310- mnc004 (美国,Verizon 品牌); mcc208-mnc00 (法国, Orange 品 牌); mcc234-mnc00 (英国,BT 品牌).

如果这个设备使用一个无线连接(GSM 电话),则 MCC 来自 SIM 卡,而 MNC 来自该设备将要附着的网络。你有时会仅使用 MCC, 例如包含特定国家合法资源在您的应用程序中。如果您的应用程序 指定了 MCC/MNC 组合的资源,这些资源仅在 MCC 和 MNC 都匹 配的时候才能使用。[/td][/tr]
[tr][td=166]语言和区域 Language and region[/td][td=412]两个字母的 ISO 639-1语言码和 ISO 3166-1-alpha-2区域码 (以"r" 为前缀)。比如 en-rUS, fr-rFR, es-rES.
这个代码是大小写敏感的:语言码是小写字母,国家码是大写字母。 你不能单独指定一个区域,但是你可以单独指定一个语言,比如 en,[/td][/tr]
[tr][td=166]
[/td][td=412]
fr, es, zh.[/td][/tr]
[tr][td=166]屏幕方向 Screen orientation[/td][td=412]纵向,横向,正方形(port, land, square)[/td][/tr]
[tr][td=166]屏幕像素密度 Screen pixel density[/td][td=412]92dpi, 108dpi 等. 当 Android 选择使用哪个资源时,它对屏幕 像素密度的处理和其它限定符不同。在文章后面描述的步骤 1Android 如何查找最匹配的目录中,屏幕密度总被认为是匹配的。 在步骤 4 中,如果被考虑的限定符是屏幕密度,Android 将选择在 那个位置的最佳匹配,而无需继续步骤 5。[/td][/tr]
[tr][td=166]触摸屏类型
Touchscreen type[/td][td=412]非触摸式,触摸笔,手指(notouch, stylus, finger)[/td][/tr]
[tr][td=166]键盘可用方式 Whether the keyboard is available to the user[/td][td=412]外在键盘,隐藏键盘,软键盘(keysexposed, keyshidden, keyssoft) 如果你的应用程序有一个特定的资源只能通过软件盘使用,则使用 keyssoft 值,如果没有 keyssoft 资源可用(只有 keysexposed 和 keyshidden)并且该设备显示了一个软键 盘,那么系统将使用 keysexposed 资源。[/td][/tr]
[tr][td=166]首选文本输入方法 Primary text input method[/td][td=412]不支持按键,标准键盘,12 键(nokeys, qwerty, 12key)[/td][/tr]
[tr][td=166]首选非触摸式导航方法 Primary non- touchscreen navigation method[/td][td=412]不支持导航,滑板,跟踪球,滚轮(nonav, dpad, trackball, wheel)[/td][/tr]
[tr][td=166]屏幕分辨率 Screen dimensions[/td][td=412]320x240, 640x480, 等. 更大的分辨率必须先被指定。[/td][/tr]
[tr][td=166]SDK 版本 SDK version[/td][td=412]设备支持的 SDK 版本,比如 v3。Android1.0 SDK 是 v1,1.1SDK 是 v2,1.5SDK 是 v3。
[/td]
[/td][/tr]
[tr][td=166]小版本[/td][td=412]你目前还不能指定小版本,它总是被设置为 0。
[/td][/tr]
[/table]

这个列表不包含设备特有的参数比如载波,品牌,设备/硬件,或者制造商。

所有应用程序需要知道的设备信息均通过上表中的资源限定符编码。

所有资源目录,许可的和未经许可的,都存放在res/目录下。

下面是一些关于许可的资源目录名称的指导原则:
你可以指定多个限定符,用破折号分开。比如,drawable-en-rUS-land 会被应用在美国英语的横向手机设备中。

限定符必须符合表2 中列举的顺序。比如:
正确的:values-mcc460-nokeys/
错误的:values-nokeys-mcc460/

限定符的值大小写敏感。比如一个纵向特定的drawable 目录必须命名为drawableport,不可以是drawable-PORT 或drawable-Port。

每个限定符类型仅支持一个值。比如,如果你想使用为法国和西班牙使用相同的drawable 文件,你得需要两个资源目录,如drawable-rES/和drawable-rFR/,包含相同的文件。

你不能使用一个名为drawable-rES-rFR 的目录。

限定符不能嵌套使用。比如,你不能使用res/drawable/drawable-en。