ITEEDU

对于不同的语言和设置支持不同的资源

你可以根据产品界面语言以及硬件配置设置不同的资源。注意,虽然你可以包含不同的字串,布局以及其他资源, 但开发包(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
地区 两个大写字母加上一个小写字母'r' ISO 3166-1-alpha-2。 例如: rUS, rFR, rES
屏幕方向 port, land, square
屏幕像素 92dpi, 108dpi, 等等。
触摸屏类型 notouch, stylus, finger
键盘是否有效 keysexposed, keyshidden
基本文本输入模式 nokeys, qwerty, 12key
无触摸屏的主要
导航模式
notouch, dpad, trackball, wheel
屏幕分辨率 320x240, 640x480, 等等。大分辨率需要开始指定。

这个列表不包含一些特殊的参数,如载体,商标,设备/硬件,制造商。任何应用程序需要知道的信息都在资源修饰语里有说明。

这里有一些通用的关于资源目录的命名指导:

  • 各个变量用破折号分开 (每个基本的目录名后跟一个破折号)
  • 变量大小写敏感(其大小写法必须始终一致)
    例如,
    • 一个drawable 的目录必须命名为 drawable-port, 而不是drawable-PORT
    • 你不能有两个目录命名为 drawable-port 以及 drawable-PORT, 甚至故意将"port" 和 "PORT"指为不同的参数也不可以。
  • 一个式子里同一个类型修饰语中只有一个值是有效的(你不能指定像这样 drawable-rEN-rFR/)
  • 你可以指定多个参数去定义不同的配置,但是参数必须是上面表格里的。例如, drawable-en-rUS-land 意思在US-English的机器里载入风景视图。
  • Android会寻找最适合当前配置的目录,这会在下面描述
  • 表格里所列的参数是用来打破平衡以防止多重路径限制。 (看下面的例子)
  • 所有目录,无论是限制的,还是不限制的,只要在 res/ 目录下.一些目录是不能嵌套的(这样 res/drawable/drawable-en是不可以的)
  • 所有的资源在被代码引用中最好都使用简单的、不加修饰的名字,如果一个资源这样命名:
          MyApp/res/drawable-port-92dp/myimage.png
    它将这样被引用:
          R.drawable.myimage (code)
          @drawable/myimage (XML)

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, 方向是 port,那我们有两个符合配置 的选项: MyApp/res/drawable-en/MyApp/res/drawable-port/. 这个目录 MyApp/res/drawable/ 可以被删除了,因为当另外一个有一次匹配正确,而它没有。
    MyApp/res/drawable/myimage.png
    MyApp/res/drawable-en/myimage.png
    MyApp/res/drawable-port/myimage.png
    
  3. 根据配置的优先级选取最终适合的文件,它们按顺利被排列在上面的表格里。更确切得说,语言匹配比方位匹配更重要, 所以我们可以通过选择语言文件来平衡, MyApp/res/drawable-en/.
    MyApp/res/drawable-en/myimage.png
    MyApp/res/drawable-port/myimage.png