配置限定符
要使应用支持多种设备配置,则务必为应用使用的每种资源类型提供默认资源, 也就是我们总是优先保证drawable
文件夹是存在的。
drawable
后的配置限定符名称可以参考:https://developer.android.com/guide/topics/resources/providing-resources#LocaleQualifier。
下面简单列下drawable经常使用到的部分配置限定符:
所以我们经常可以看到drawable-mdpi
、drawable-hdpi-v4
这种文件夹命名出现。
、
、
、
限定符命名规则
1.您可以为单组资源指定多个限定符,并使用短划线分隔。例如,drawable-en-rUS-land
适用于横排美国英语设备。
2.这些限定符必须遵循表 2 中列出的顺序。例如:drawable-hdpi-port
/是错误的,而drawable-port-hdpi
是正确的。
3.能嵌套备用资源目录。例如,您不能拥有 res/drawable/drawable-en/
。
4.值不区分大小写。在处理之前,资源编译器会将目录名称转换为小写。
5.对于每种限定符类型,仅支持一个值。例如,若要对西班牙语和法语使用相同的可绘制对象文件,则您肯定不能拥有名为 drawable-rES-rFR/
的目录,而是需要两个包含相应文件的资源目录,如 drawable-rES/
和 drawable-rFR/
。
创建别名资源
如果您想将某一资源用于多种设备配置(但是不想作为默认资源提供),则无需将同一资源放入多个备用资源目录中。
例如,假设您有一个应用图标 icon.png
,并且需要不同语言区域的独特版本。 但是,加拿大英语和加拿大法语这两种语言区域需要使用同一图标。您可以将图标另存为 icon_ca.png
(除 icon.png
以外的任何名称),并将其放入默认 res/drawable/
目录中。然后,在 res/drawable-en-rCA/
和 res/drawable-fr-rCA/
中分别创建 icon.xml
文件:
<?xml version="1.0" encoding="utf-8"?>
<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
android:src="@drawable/icon_ca" />
<bitmap>
可以创建指向现有可绘制对象的别名。
也就是说,实际上我们把icon.xml
编译成了R.drawable.icon
资源。
同理<merge>
可创建指向现有布局的别名,例如, main.xml
:
<?xml version="1.0" encoding="utf-8"?>
<merge>
<include layout="@layout/main_ltr"/>
</merge>
也就是说,实际上我们把main.xml
编译成了R.layout.main
资源。
同理字符串:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="hello">Hello</string>
<string name="hi">@string/hello</string>
</resources>
R.string.hi
资源现在是 R.string.hello
的别名。
同理颜色:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="red">#f00</color>
<color name="highlight">@color/red</color>
</resources>
Android 如何查找最佳匹配资源
https://developer.android.com/guide/topics/resources/providing-resources#BestMatch