|
您可以为您的应用程序选择不同的UI语言和硬件配置。注意,尽管您可以使用不同的字符串,布局管理器和其他的很多资源,SDK不会暴露方法支持您显示的指定何种资源需要被加载。Android识别整套资源的硬件和本地化属性,而后适当的加载他们。用户可以在设备的设置面板中更换语言设置。
为了包含可更换资源,创建平行的资源目录,以限定的方式命名这些目录,配置文件也同样适用(语言、屏幕等)。下面的例子给出同时支持英语和法语的方法:
MyApp/
res/
values-en/
strings.xml
values-fr/
strings.xml
Android支持多种命名限定和多样的值风格。添加这些信息到资源目录末尾,使用连接号分离。您可以为单个目录添加多段限定。但是他们需要保持一定顺序以方便阅读和理解。下面的例子就是一个带有限定的可绘制对象资源目录的全名:
MyApp/
res/
drawable-en-rUS-port-160dpi-finger-keysexposed-qwerty-dpad-480x320/
更具代表性的,您可能需要指定一些资源配置参数。您也许需要除去完整列表中的一些值,但是还有很多很多值被保留在列表中:
MyApp/
res/
drawable-en-rUS-finger/
drawable-port/
drawable-port-160dpi/
drawable-qwerty/
限定词值
语言两字节ISO 639-1 低位的语言编码,比如:en, fr, es
区域两字节ISO 3166-1-alpha-2 带有小写"r"前缀的大写地区编码。如: rUS, rFR, rES
屏幕方向port, land, square
屏幕像素密度92dpi, 108dpi, etc.
触摸屏类型notouch, stylus, finger
用户是否可以使用键盘keysexposed, keyshidden
默认的文字输入方法nokeys, qwerty, 12key
默认的非触摸导航方法notouch, dpad, trackball, wheel
屏幕尺寸320x240, 640x480, etc. 较大的尺寸必须首先声明。
次列表不包括设备定制的参数,比如信号、商标等。所有应用程序应该知道的信息都需要按照上面的列表信息编码。
这里有一些命名的通用原则:
. 值之间用连接号连接
. 值是大小写敏感的,比如
o 一个指定的drawable目录必须命名为drawable-port,而不是drawable-PORT。
. 每种限定词只能有一种选择,您不能命名目录为drawable-rEN-rFR/。
. 您可以添加多种限定词,但是每个限定词必须在在上面列表中。比如drawable-en-rUS-land表明其用于直板的美式英语设别上。
. 带有限定词的目录不能被嵌套,比如,res/drawable/drawable-en是不允许的。
. 资源引用在语法中表示为未加修饰的表达式,比如 MyApp/res/drawable-port-92dp/myimage.png,在XML中表示为:@drawable/myimage,在代码中表示为:R.drawable.myimage。
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 |
|