首先了解什么是R文件

当 Android 应用程序被编译,会自动生成一个 R 类,其中包含了所有 res/ 目录下资源。包括布局文件layout,图片文件drawable等。
具体的内容如下所示:

public final class R{
	
	//全是以 publi static final 开头的内部类
	
	...
	
	public static final class layout{...}
	public static final class id{...}
	public static final class drawable{...}
	public static final class mipmap{...}
	public static final class color{...}
	public static final class string{...}
	public static final class style{...}
	
	...
	
}

我们在这里并不需要知道更多的东西,只需要知道Android会自动生成R文件(R.java)是一个java类,其中包括drawable、layout、string等各色静态内部类(每个静态内部类分别对应着一种资源,如layout静态内部类对应着layout中的接界面文件)。而每个静态内部类中的静态常量分别定义为一条资源标识符。
如下:内部类 id 里面的内容(下面省略了部分代码):

//id内部类中是button

public static final class id{
	
	//全是以 public static final int 开头的属性
	
	...
	
	public static final int button_1="0x7f070022";
	public static final int button_2="0x7f070023";
	public static final int button_3="0x7f070024";
	
	...
	
}

好了,总结一下就是:Android自动运行生成R文件,该文件中包含各种静态内部类(res资源:如layout、string、drawable等),内部类中包含静态常量(资源标识符:如layout静态类中包含first.xml,second.xml,那么资源标识符就是first、second)。

如何使用R文件

这又是在Android中分成两种情况

1、 在java文件中使用R文件

1.使用的res资源下,通过R.子类.资源名(即资源标识符) R.type.name

//字符
R.string.name1
R.string.name2
//图片
R.drawable.icon1
R.drawable.icon2
//布局
R.layout.first_layout
R.layout.second_layout
//....

2.使用android自带的资源下, android.R.type.name 只是需要在前面加上 android. 以申明来自Android系统

2、在XML中使用R文件

1.在res资源下,@[package:]type/name(使用我们自己包下的资源可以省略 package)

@drawable/icon
/*
其中@代表R.java类
drawable代表的是R.java中的静态内部类drawable
icon代表静态内部类drawable中的静态属性icon
而该属性可以指向 res 目录下的“drawable-*dpi”中的 icon.png 图标
*/

2.在android内置资源下,则要添上包名“android:”

android:textColor=”@android:color/red”
最后说明一下“@+id/string_name”表达式

顺便说一下,在布局文件当中我们需要为一些组件添加 Id 属性作为标示,可以使
用如下的表达式“@+id/string_name”
其中“+”表示在 R.java 的名为 id 的内部类中添加一条记录。如”@+id/button”的含义是在 R.java 文件中的 id 这个静态内部类添加一条常量名为 button,该常量就是该资源的标识符。如果 id 这个静态内部类不存在,则会先生成它。
通过该方式生成的资源标识符,仍然可以以“@id/string_name”的方式引用。