8.2.3 使用应用资源
通过资源管理对象android.content.res.Resources和R类,开发者就可以在代码中使用所有的应用资源。比如,可以如下从资源中读取Id为R.string.name的字符串:
final Resources resources=getResources();
String name=resources.getString(R.string.name);
Resources类提供了一系列的get函数,用来读取各种类型的资源信息。比如,可以通过Resources.getColor读取颜色信息,通过Resources.getLayout读取界面信息[1]。
除了应用本身的资源信息,Resources对象还可以读取系统提供的资源信息。Android系统提供的应用资源放置在android包中,对应的R类为android.R。使用系统资源的示例如下:
final Resources resources=getResources();
XmlResourceParse layout=resources.getLayout(
android.R.layout.simple_list_item_2);
除了可以通过Resources对象获取资源,大量的Android控件和类库都支持通过R类直接赋值。比如,可以通过R类直接设置文本信息:
TextView name=(TextView)findViewById(R.id.name);
name.setText(R.string.name);
而除了在代码中使用资源信息,资源文件本身也可能需要引用其他的资源信息。比如,在界面(layout)文件中设置一个按钮控件,就可能需要使用图片文件和字符串信息:
<Button…
android:background="@drawable/button_background"
android:text="@string/submit"/>
在xml中引用资源信息的规范如下:
@[包名:]资源类别/资源项
这个命名规范与R类的结构一一对应。包名部分,对应着R类所在的包信息;资源类别,与R类的静态内嵌类对应;而资源项,则等同于R类的整型常量。
如果引用的资源位于本应用包中,则包名信息可以省略;但如果引用的是第三方资源,包名信息则是必不可少的。比如,引用系统资源的一个示例如下:
<Button…
android:background="@android:drawable/btn_plus"/>
[1]更多接口信息,可以参见SDK:http://androidappdocs.appspot.com/reference/android/content/res/Resources.html。