步骤很简单,只需要两步:
1.创建带有目标语言的配置修饰符的资源子目录
2.将可选资源放入该目录下,android系统会自动处理后续工作
在这里我们需要讲解一下配置修饰符。
中文的配置修饰符:-zh,那么我们需要在res目录下新建两个子目录:res/raw-zh,res/values-zh。
对于没有配置修饰符修饰的子目录,安卓都识别为默认资源目录。但是有一个例外,那就是屏幕显示密度(drawable资源),通常具有三个配置修饰符:-mdpi -hdpi -xhdpi。安卓系统选择何种drawable资源综合考虑屏幕密度和实际尺寸,甚至有可能会选择低于或高于当前设备屏幕密度的drawable资源,然后通过缩放来实现匹配。但长话短说,最重要的是我们需要记住,res/drawable并不是默认资源目录,我们无需将默认drawable资源放到该目录下。
常用的配置修饰符
中文语言(values-zh)
水平模式的屏幕方位(layout-land)
中等的屏幕显示密度(drawable-mdpi)
11及以上的API级别(values-v11)
那么有哪些是具有配置修饰符的设备特征呢?
关于设备配置特征及其对应配置修饰符请查看http://developer.android.com/guide/topics/resources/providing-resources.html
上图也是配置修饰符的优先级,这话怎么理解呢?我们直接上实例:
old phone setting: 语言(英文),屏幕方位(垂直)
我们想干什么:当改变手机语言配置时,该app也能变成中文;当屏幕方位变成水平时,标题能变成另一句更长的话。于是我们做了两件事:values-zh(用来存放中文字符串资源),values-land(用于存放当屏幕处于水平状态时的标题字符串)
new phone setting:语言(中文)。屏幕方位(水平)
这时候问题来了:安卓系统会选用那个values资源呢?这时候对应上图所示的配置修饰符优先级,我们可以发现语言的优先级高于屏幕方位的优先级,因此系统会选用values-zh,而不是values-land。
问题知道了,如何解决呢?答案是多重配置修饰符。
通过values-zn-land就可以解决这个问题了。但是我们必须注意,顺序也是通过优先级来确定的。
整个配置修饰符的使用过程是这样的:
手机配置-----(完全对应)---->配置修饰符--(获取对应资源)-->完成改变
但是对于屏幕密度这个配置并非完全对应,这话什么意思呢?还是举例,比如说手机配置语言改成了中文,那么就会和-zh对应,但是屏幕密度如果是中等,但并不会必然和-mdpi对应,系统会综合考虑屏幕密度以及实际手机尺寸来得到应有的资源。
太阳照常升起,人生寂寞如雪。