如果您想将某一资源用于多种设备配置(但是不想作为默认资源提供),则无需将同一资源放入多个备用资源目录中。 相反,您可以(在某些情况下)创建备用资源,充当保存在默认资源目录下的资源的别名。
注:并非所有资源都会提供相应机制让您创建指向其他资源的别名。 特别是,xml/
目录中的动画资源、菜单资源、原始资源以及其他未指定资源均不提供此功能。
例如,假设您有一个应用图标 icon.png
,并且需要不同语言区域的独特版本。 但是,加拿大英语和加拿大法语这两种语言区域需要使用同一版本。 您可能会认为需要将相同的图像复制到加拿大英语和加拿大法语对应的资源目录中,但事实并非如此。 相反,您可以将用于二者的图像另存为icon_ca.png
(除 icon.png
以外的任何名称),并将其放入默认 res/drawable/
目录中。然后,在 res/drawable-en-rCA/
和 res/drawable-fr-rCA/
中创建 icon.xml
文件,使用 <bitmap>
元素引用 icon_ca.png
资源。这样,您只需存储 PNG 文件的一个版本和两个指向该版本的小型 XML 文件。(XML 文件示例如下。)
可绘制对象
要创建指向现有可绘制对象的别名,请使用 <bitmap>
元素。例如:
<?xml version="1.0" encoding="utf-8"?> <bitmap xmlns:android="http://schemas.android.com/apk/res/android" android:src="@drawable/icon_ca" />
如果将此文件另存为 icon.xml
(例如,在备用资源目录中,另存为 res/drawable-en-rCA/
),则会编译到可作为 R.drawable.icon
引用的资源中,但实际上它是 R.drawable.icon_ca
资源(保存在 res/drawable/
中)的别名。
布局
要创建指向现有布局的别名,请使用包装在 <merge>
中的 <include>
元素。例如:
<?xml version="1.0" encoding="utf-8"?> <merge> <include layout="@layout/main_ltr"/> </merge>
如果将此文件另存为 main.xml
,则会编译到可作为 R.layout.main
引用的资源中,但实际上它是 R.layout.main_ltr
资源的别名。
字符串和其他简单值
要创建指向现有字符串的别名,只需将所需字符串的资源 ID 用作新字符串的值即可。例如:
<?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>