无论什么类型的Android资源,都使用它们在Java源代码中的id来标识(或引用)。将id分配给XML文件中资源的语法成为资源引用语法。语法结构为:@[package:]type/name。
type对应于R.java中一种可用的资源类型命名空间,包括:R.drawable、R.id、R.layout、R.string、R.attr、R.plural、R.array。XML资源引用语法中相应的类型为:Drawable、id、layout、string、attr、plurals、string-array。资源引用@[package:]type/name中的name部分是提供给资源的名称。它在R.java中也被表示为一个int常量。
如果未在语法@[package:]type/name中指定任何“包”,那么type/name对将根据本地资源和应用程序的本地R.java进行解析。如果指定了android:type/name将使用包android来解析引用ID,具体通过android.R.java文件来完成。可以使用任何Java包名称代替package占位符,以找到正确的R.java文件来解析资源引用。
1.在java代码中使用资源
为了在Java代码中使用资源,AAPT会为Android项目自动生成一份R.java文件(根据应用中的资源文件来自动生成的,可以把R.java理解成Android应用的资源字典),R类里为每份资源分别定义一个内部类,其中每个资源项对应于内部类里一个int类型的Filed。
注:AAPT生成R.java文件的规则主要是两条:
(1)每类资源对应R类的一个内部类。比如哦所有界面布局资源对应于layout内部类;所有字符串资源对应于string内部类;所有标识符资源对应于id内部类。
(2)每个具体的资源项对应于内部类的一个public static final int类型的Field。
eg:字符串资源文件对应于R.java里如下内容:
public static final class string {
public static final int app_name=0x7f050000;
}
借助于AAPT自动生成的R类的帮助,可以在Java代码中通过R.string.app_name来引用该字符串常量。
2.在XML中使用资源
在XML文件中使用资源更加简单,只要按照如下格式来访问即可:
@<资源对应的内部类的类名>/<资源项的名称>
eg:@string/app_name
当我们在XML文件中使用标识符时,这些标识符无须使用专门的资源进行定义,直接在XML文档中按如下格式分配标识符即可:
@+id/<标识符代号>
eg:android:id=”@+id/ok”
注:如果希望在Java代码中获取该组件,通过调用Activity的findViewById()方法即可实现;如果希望在XML文件中获取该组件,则可以通过资源引用的方式来引用它。
3.定义资源ID供以后使用
分配id的一般模式可以是创建一个新id,或者使用Android包创建的id。但也可以预先创建id,以后再在自己的包中使用它们。
如<TextView android:id=”@+id/text”>,如果存在一个名为text的id,那么将使用它。如果该id不存在,那么将创建一个新id。注意,不能使用R.id.text这样的常量,R.java是不可编辑的,即使它可以编辑,每次在/res/*子目录中更改、添加或删除一些项时,都会重新生成这个文件。
解决的办法是使用资源标记item来定义id,不将它附加到任何特定的资源。如下:
<resources>
<item type=”id” name=”text”/>
</resources>