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。