一、R文件
当 Android 应用程序被编译,会自动生成一个 R 类,其中包含了所有 res/ 目录下资源的 ID,如布局文件,资源文件,图片(values下所有文件)的ID等。在写java代码需要用这些资源的时候,你可以使用 R 类,通过子类+资源名或者直接使用资源 ID 来访问资源。
PS:添加资源的命名规则:资源文件只能以小写字母和下划线做首字母,随后的名字中只能出现 [a-z0-9_.] 这些字符,否则R.java文件不会自动更新
R.java文件是活动的Java文件,如MainActivity.java的和资源如strings.xml之间的胶水
二、R.java文件中资源ID的含义
在Android中资源的使用几乎无处不在,layout、string、drawable、raw、style、theme等等都是。这些资源会在编译过程中被打包进APK中(res文件夹)或者被打包成独立的资源APK包(比如framework-res.apk)。但是这些资源都会被赋予独一无二的ID即资源索引来方便系统访问。这些资源索引由Android的工具AAPT(Android Asset Packing Tool)生成的八位十六进制整数型。
中间 02 所在位置值代表资源ID对应的资源的类型,分别是:
02:drawable 03:layout 04:values 05:xml 06:raw 07:color 08:menu
PS:分配resource id的主要逻辑实现是在framework/base/tools/aapt/Resource.cpp 和 ResourceTable.cpp
三、通过R文件来实现资源调用
1、java代码中使用
//获取文字
getResources().getText(R.string.name);//获取string类型的res数据
getResources().getString(R.string.name);
//图片
getDrawable(R.drawable.icon);
//颜色
getResouces().getColor(R.color.red);
//布局
setContentView(R.layout.main);
//控件
findViewById(R.id.txt_name)
上面的方法都是使用context/MainActivity.this来调用,比如context.getString(R.string.name)。
2.XML代码中使用
通过@xxx即可得到,比如这里获取文本和图片:
<TextViewandroid:text="@string/hello_world"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/img_back"/>
参考文章Android的R.java文件和Android开发中的R文件