• 技术文章 >Java >Java基础

    r.java是什么文件

    醉折花枝作酒筹醉折花枝作酒筹2021-07-27 11:25:37原创499

    R.java文件是编译器自动生成的,它无需开发人员对其进行维护。R.java会自动收录当前应用中所有的资源,并根据这些资源建立对应的ID。可以简单的把R.java理解成是当前Android应用的资源字典。

    本教程操作环境:windows7系统、java10版、DELL G3电脑。

    1、R.java文件简介

    Android studio中,R.java所在目录为:app/build/generated/source/r/arm/debug/com.example.dfanghu.myapplication/R.java

    gen目录下的R.java文件是编译器自动生成的,它无需开发人员对其进行维护。R.java会自动收录当前应用中所有的资源,并根据这些资源建立对应的ID,包括:布局资源、控件资源、String资源、Drawable资源等。我们可以简单的把R.java理解成是当前Android应用的资源字典。

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

    2、R.java文件内容解析

    HelloWorld工程中的R.java文件

    package com.android.hellworld;
    
    public final class R {
        public static final class attr {
        }
        public static final class drawable {
            public static final int icon=0x7f020000;
        }
        public static final class layout {
            public static final int main=0x7f030000;
        }
        public static final class string {
            public static final int app_name=0x7f040001;
            public static final int hello=0x7f040000;
        }
    }

    R.java文件中默认有attr、drawable、layout、string等四个静态内部类,每个静态内部类分别对应着一种资源,如layout静态内部类对应layout中的界面文件,其中每个静态内部类中的静态常量分别定义一条资源标识符,如public static final int main=0x7f030000;对应的是layout目录下的main.xml文件。

    由于目前【drawable-*dpi】目录下都只有icon.png一个图片文件,因此此时不同详述的同名的icon.png文件在drawable内部类总只有一个icon属性。如果我们在【drawable-*dpi】目录下再添加一幅图片,则内部类中会自动的添加一个icon属性。

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

    理解了R.java文件中内容的来源,即当开发者在res/目录中任何一个子目录中添加相应类型的文件之后,ADT会在R.java文件中相应的内部类中自动生成一条静态int类型的常量,对添加的文件进行索引。如果在layout目录下再添加一个新的界面,那么在public static final class layout中也会添加相应的静态int常量。相反当我们在res目录下删除任何一个文件,其在R.java中对应的记录会被ADT自动删除。

    R.java文件按除了有自动标示资源的索引功能之外,还有另外一个主要的功能,如果res目录中的某个资源在应用中没有被使用到,在该应用被编译的时候系统就不会把对应的资源编译到该应用的APK包中,这样可以节省Android手机的资源。

    3.如何通过R.java文件来引用到所需要的资源

    1.在java程序中引用资源

    按照java的语法来引用即:R.resource_type.resource_name

    注意:resource_name不需要文件的后缀名

    Android系统本身自带了很多的资源,我们也可以进行引用,只是需要再前面加上“Android.”以声明该资源来自Android系统,即:Android.R.resource_type.resouce_name

    例:【drawable-*hpi】下的icon.png

    该图片在R.java文件的映射为drawable内部类下icon参数,则如果要获取该资源,则写法为:R.drawble.icon

    2.在XML文件中引用资源

    格式:@[package:]type/name

    在xml文件中,如main.xml以及AndroidMainfest.xml文件中通过“@drawable/icon”的方式获取。其中“@”代表的是R.java类。“drawable”代表的是R.java中的静态内部类“drawable”,“/icon”代表静态内部类“drawable”中的静态属性“icon”,而该属性可以指向res目录下的“drawable-*dpi”中的icon.png资源。其他类型的文件也比较类似。凡是在R文件中定义的资源都可以通过“@Static_inner_classes_name/resource_name”的方式获取。如“@id/button”,“@string/app_name”。

    如果访问的是Android系统中自带的文件,则要添加包名“Android:”。例如:android:textColor="@android:color/red"

    4.如何往R.java文件中添加一条资源记录

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

    相关视频教程推荐:Java视频教程

    以上就是r.java是什么文件的详细内容,更多请关注php中文网其它相关文章!

    声明:本文原创发布php中文网,转载请注明出处,感谢您的尊重!如有疑问,请联系admin@php.cn处理
    专题推荐:r.java
    上一篇:java中构造方法怎么写 下一篇:jvm类加载过程有哪些阶段
    大前端线上培训班

    相关文章推荐

    • jsp调用javascript方法是什么• java和JavaScript闭包的区别是什么• java容器都有哪些• java中构造方法怎么写

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网