3. 根据系统配置选择非常好的资源
为增加应用程序UI的美观,达到最好的人机交互体验,通常需要根据当前的系统配置选择非常好的的资源。这是通过创建与上述目录平行的目录并对目录名增加限定符来实现的。
例如,应用程序有如下的strings.xml:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="hello">Hello</string>
</resources>
<resources>
<string name="hello">Hello</string>
</resources>
现在想在系统是中文的时候显示“你好”而不是“Hello”,可以创建一个如下的strings.xml。
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="hello">你好</string>
</resources>
<resources>
<string name="hello">你好</string>
</resources>
然后在res目录下创建一个名为values-zh的目录,将该strings.xml文件放到这个目路中即可。最终的res目录结构如下所示。
res/
values-en/
strings.xml
values-zh/
strings.xml
values-en/
strings.xml
values-zh/
strings.xml
下表是限定符的类型和有效的值。

表1 资源目录限定词
带限定符的目录的命名规则:
- 限定符以“-”隔开。
- 限定符是大小写敏感的。
- 同一类限定符只能有一个值。
- 限定符可以有多个,但是必须按照上表中的顺序。
- res/目录下的子目录不能嵌套。
OPhone系统在运行的时候会按照当前的配置选择非常好的的资源,下面是一个例子。
例如当前屏幕像素密度为108dpi,语言为en,屏幕方向是port。有个资源myimage.png,在res目录下有如下结构:
res/drawable/myimage.png
res/drawable-en/myimage.png
res/drawable-port/myimage.png
res/drawable-port-92dpi/myimage.png
res/drawable-en/myimage.png
res/drawable-port/myimage.png
res/drawable-port-92dpi/myimage.png
首先,删除不符合当前配置的资源。在例子中,由于屏幕像素密度是108dpi,所以剔除res/drawable-port-92dpi/myimage.png。
其次,选择跟当前配置匹配数目最多的。在本例中,res/drawable-en/myimage.png 和res/drawable-port/myimage.png各匹配一个,而res/drawable/myimage.png一个没有,所以被剔除。
最后,根据表1中的优先级,挑出非常好的的资源。在本例中,本地语言的优先级高于屏幕方向的优先级,故删除res/drawable-port/myimage.png,选择res/drawable-en/myimage.png。