Android开发——R文件

时间:2024-06-01 07:50:15

R文件介绍

R文件文件名为R.java,所在目录为:

app/build/generated/not_namespaced_r_class_sources/debug/processDebugResources/r/com/example/xxx(此处为你的Android程序名)/R.java

但并非所有的都是这个目录

app/build/generated/source/r/arm/debug/com.example.dfanghu.xxx(程序名)/R.java,

app-->build-->generated-->source-->r-->debug,在debug下的两个选项的子文件中分别有一个R文件,

app/build/generated/source/r/androidTest/debug/com.example.administrator.xxx(程序名)/R.java,等都是有可能的,这是我在网上找的一些文件路径。

 

R文件是自动生成的,它会自动收录当前应用中所有的资源并根据这些资源建立对应的ID,包括:布局资源、控件资源、String资源、Drawable资源等。我们可以简单的把R.java理解成是当前Android应用的资源字典。

在当前项目不能包含任何错误的前提下,手动删除了R.java文件,编译器会立即重新生成一个R.java文件;在res/目录中增加了一个新的资源,编译器也会立即把这个资源的ID收录到R.java文件中。,但是都是有个前提的,就是当前项目不能包含任何错误。当发现在更新的资源后,R.java没有对此资源进行收录,那么就需要检查一下当前项目是否存在错误。

 

R文件结构:

R文件是由一个个静态内部类组成,如图

Android开发——R文件

这是其中一个类展开后的内容

Android开发——R文件

R.java 文件中默认有attr、drawable、layout、string等色哥静态内部类,每个静态内部类分别对应着一种资源,如layout静态内部类对应着layout中的接界面文件,其中每个静态内部类中的静态常量分别定义为一条资源标识符。

如最后一行的:

Android开发——R文件

对应的是layout文件夹中的activity_main.xml文件。

 

资源文件只能以小写字母和下划线做首字母,随后的名字中只能出现[a-z0-9_] 这些字符,否则R.java文件不会自动更新,并且eclipse会提示错误

当开发者在res/目录中任何一个子目录中添加相应类型的文件之后,ADT会在R.java文件中相应内部类中自动生成一条静态int类型的常量,对添加的文件进行索引

如果在layout目录下添加一个新界面,那么在public static final class layout 中也会添加相应的静态int常量

相反,我们再res目录下删除任何一个文件,其在R.java文件中对应的记录会被ADT自动删除

R.java文件除了自动标示资源的索引功能外,如果res目录中的某个资源在应用中没有被使用到,在该应用被编译的时候系统就不会把对应的资源编译到该应用的apk包中,节省资源

 

如何使用R文件

 

1、在java程序中应用资源
按照java的语法来引用即 R.resource_type.resource_name
注意:resource_name 不需要文件的后缀名
Android系统本身自带了很多资源可以引用,只是需要在前面加上 Android. 以申明来自Android系统,即Android.R.resource_type.resource_name

2、在xml文件中引用资源

在xml文件中一般是通过@[package:]type/name的方式获取的,其中@代表R.java类,drawable代表的是R.java中的静态内部类drawable,/icon代表静态内部类drawable中的静态属性icon
如果访问的是Android系统自带的文件,则要添加Android:,如下:

                               android:textColor="@android:color/red"

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

 

R文件的问题:

      通常,在添加资源或者删除引用后重新保存文件,Android Studio会准确无误的重新编译以项目。

      不过,资源编译错误有时会一直存在会莫名其妙的出现。如遇这种情况,请尝试如下操作。

  •      重新检查自资源文件中XML文件的有效性

       如果最近一次编译时未生成R.java文件,项目中资源引用的地方都会出错。通常,这是由某个布局XML文件中的拼写错误引起的。既然布局XML文件有时无法得到有效校验,拼写错误自然难以发现。修正找到的错误并重新保存XML文件,AS会生成新的R.java文件

  •        清理项目

       选择Build → CleanProject菜单项。AS会重新编译整个项目,消除错误。建议经常做深度项目清理。

  •        使用Gradle同步项目

       如果修改了build.gradle配置文件,就需要同步更新项目的不安已设置。选择File →Sync Project with Gradle File菜单项,AS会使用哪个正确的项目设置重新编译项目。这会解决Gradle配置变更带来的问题。

  •        运行Android Lint

       仔细查看Lint警告信息,没准就会有新发现

参考博客:https://blog.****.net/qq_34686440/article/details/88934680

                  https://blog.****.net/llp1992/article/details/40681599