在 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 不

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:///guide/topics/resources/providing-resources.html
上资料,在 Dev Guide/Framework Topic/Application Resource/Providing Resources 下查看