为语言和配置提供可更换的资源(资源文件夹适配问题)

来源:互联网 时间:1970-01-01

您可以为您的应用程序选择不同的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. 较大的尺寸必须首先声明。

 

 

次列表不包括设备定制的参数,比如信号、商标等。所有应用程序应该知道的信息都需要按照上面的列表信息编码。

这里有一些命名的通用原则:

·         值之间用连接号连接

·         值是大小写敏感的,比如

   一个指定的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

相关阅读:
Top