在 eclipse 的工程中,res 目录有默认几项 resource,如 drawable,
layout,menu,values 其余还有
res/anim/用来放置动画
res/xml/用来放置 style theme 等 xml 定义。
res/raw/用来放置 data 数据
我们引用这些 resource 时候,在 java 代码中是通过 R.resource_type.resource_name 的
方式来使用,如 setTitle(R.string.main_title);
还有一种是在 xml 中直接引用,如
<TextView
android:id =”@+id/hello_view”
android:layout_width=”fill_parent”
android:layout_height=”wrap_content”
android:text=”@string/hello”
/>
引用了名字为 hello 的字符串。当程序运行时,通过 Resource 类会装载 strings.xml
中名字为 hello 的字符串。但 Resource 类装载 strings.xml 时会根据当前手机的设置来选
择装载哪一个 xml 文件。这些手机设置有 MCC and MNC, Language and region,
Screen dimensions, Wider/taller screens, Screen orientation,Screen pixel density,
Touchscreen type, SDK version,也就是说通过手机当前语言区域,屏幕的大小,屏幕
像素, 以及当前 android sdk 的版本号来选择。通过把 strings.xml 放置在以这些选项命名
的文件夹下,Resource 类就能正确的装载所需的字符串。
我们以不同的地方来做一次国际化,首先 values 表示默认的字符串,也即 Resource
找不到匹配的资源时,默认使用 values 文件夹下的资源,其余 drawable 等资源也是同
样的。
当命名这些文件夹的名字时,不同的选项用-分开,而且次序必须和下面表格中的次
序一样。
文件夹的命名必须都是小写字符,否则在一些大小敏感的文件系统中可能会出错,
如果你用大写 eclipse 的 adt 都会自动报错。小写字母 r 表示 region 的意思,如
values-zh-rcn 中文简体
values-zh-rtw 中文繁体
在 strings.xml 中除了字符串本身不一样,xml 中定义该字符串的名字,id 都是一样
的。所以在代码或者 xml 中引用该资源时,只要引用名字即可或者 id 即可,程序启动
时候 Resource 类回到相应的目录下去寻找正确的字符串(资源)
其余手机的选项,像屏幕的像素等都可以建立相应得目录。
修饰语 | 值 | 优先级 |
语言 | 两个小写字母,参考下面各国语言 缩写网址 | 越往下优先级越低 |
地区 | 两个大写字母加上一个小写字母 r,如 rTW,rCN | |
屏幕方向 | port,land,square | |
屏幕像素 | 92dpi,108dpi 等等 | |
触摸屏类型 | notouch,stylus 笔触,finger 手触 | |
键盘是否有效 | keysexposed,keyshidden | |
基本文本输入模式 | nokeys,qwerty,12key | |
无触摸屏的主要导航模式 | Notouch,dpad,trackball,wheel | |
屏幕分辨率 | 320*240,640*480d 等等 |
这个列表不包含一些特殊的参数,如载体,商标,设备/硬件,制造商。任何应用程
序需要知道的信息都在资源修饰语里有说明。这里有一些通用对关于资源目录的命名指
导:
*各个变量用破折号 ( – ) 分开
*变量大小写敏感(其大小写法必须一至)
例如,
一个 drawable 的目录必须命名是 drawable-port,而不是 drawable-PORT.也不能重复
定义,甚至故意将 port 和 PORT 指为不同的参数也不行
*一个式子里同一个类型修饰语 里只有一个值是有效的,如 drawable-rEN-rFR 无效
*你可以指定多个参数去定义不同的配置,但是参数对顺序必须是上面表格里的
*Android 会寻找最合适当前配置对目录,这会在下面描述
*表格里所列的参数是用来打破平衡一方值多重路径限制的 如 drawable/drawable-en 不
行
各国的语言缩写:
http://www.loc.gov/standards/iso639-2/php/code_list.php 第二列是语言缩写
国家和地区简写:
http://www.iso.org/iso/country_codes/iso_3166_code_lists/english_country_names_an
d_code_elements.htm#t..
Android 如何找到最匹配的目录
Android 将根据配置文件挑选资源,挑选过程为:
1.排除所有和配置文件中指定的当前设备参数不匹配的资源。比如,如果屏幕像素
密度为 108dpi,下面所列出的目录中,只有 MyApp/res/drawable-port-92dpi/会被排除。
MyApp/res/drawable/myimage.png
MyApp/res/drawable-en/myimage.png
MyApp/res/drawable-port/myimage.png
MyApp/res/drawable-port-92dpi/myimage.png
2.接下来系统将根据限定字的多少来筛选。例如,如果您的本地系统识别为 en-
Gb 编码的便携设备,随后我们还剩两个目录可以匹配。
MyApp/res/drawable/myimage.png
MyApp/res/drawable-en/myimage.png
MyApp/res/drawable-port/myimage.png
3.选择机制将根据配置文件中定义的优先级,优先级定义于上面的列表顺序中。
MyApp/res/drawable-en/myimage.png
MyApp/res/drawable-port/myimage.png
4.经过层层筛选就剩下了要应用的资源了
MyApp/res/drawable-en/myimage.png
好了,上面的知识相信大家都了解了不少,那么就要趁热打铁了给大家再增加点关
于各国手机运营商
的资源文件配置方法,如下:
首先大家要了解下他们的格式规范,以字符串为例
values-mcc+国别码-mnc+运营商代码+…
MCC=移动国家号码,由 3 位数字组成,唯一地识别移动用户所属的国家。我国
为 460。MNC=移动网号,由两位数字组成,用于识别移动用户所归属的移动网,如
联通 :01
移动:00/02
电信:03
所以,values-mcc460-mnc01-en 表示的意思就是中国联通英文的资源信息
还可参考官方 http://developer.android.com/guide/topics/resources/providing-resources.html
上资料,在 Dev Guide/Framework Topic/Application Resource/Providing Resources 下查看