Android的R.java文件
1、Android资源管理简介:
Android应用程序资源可以分为两大类,分别放在assets和res文件夹下。assets目录下保存的是一些原始的文件,可以以任何方式来进行组织。这些文件最终会被原装不动地打包在apk文件中。如果我们要在程序中访问这些文件,那么就需要指定文件名来访问。通常,这项工作由AssetManager类来完成。
例如,假设在assets目录下有一个名称为filename的文件,那么就可以使用以下代码来访问它:
- AssetManager am= getAssets();
- InputStream is = am.open("filename");
res目录下保存的文件大多数都会被编译,并且都会被赋予资源ID,这些资源ID被保存在R.java文件中。这样我们就可以在程序中通过ID来访问res类的资源。
2、R类简介:
R.java文件中的R类默认有attr、drawable、layout、string等四个静态内部类,每个静态内部类分别对应着一种资源,如layout静态内部类对应layout中的界面文件,其中每个静态内部类中的静态常量分别定义一条资源标识符,如public static final int main=0x7f030000;对应的是layout目录下的main.xml文件。
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文件来引用到所需要的资源:
3.1、在java程序中引用R类资源:
按照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
3.2、在XML文件中引用R资源ID:
格式:@[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"
3.3、在XML文件中向R类添加资源ID:
在布局文件中当我们需要为一些组件添加Id属性作为标识,可以使用如下的表达式:“@+id/string_name”,其中“+”表示在R.java的名为id的内部类中国添加一条记录。例:“@+id/button”的含义是在R.java文件中的id这个静态内部类添加一条常量名为button,该常量就是该资源的标识符。如果
id这个静态内部类不存在,则会先生成它。
4、R.java文件中资源ID的含义:
本段转自:Android Resource处理流程分析(一)-- 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
Android的R.java文件的更多相关文章
- eclipse android 不会自动生成R.java文件和包的解决办法
eclipse下编写android程序突然不会自动生成R.java文件和包的解决办法 我的eclipse原来是好好的,什么问题都没有的,结果今天一打开新建一个android程序,发现工程里不会自动 ...
- Android下HelloWorld项目的R.java文件介绍
R.java文件介绍 HelloWorld工程中的R.java文件 package com.android.hellworld; public final class R { public s ...
- [转]eclipse下编写android程序突然不会自动生成R.java文件和包的解决办法
原网址 : http://www.cnblogs.com/zdz8207/archive/2012/11/30/eclipse-android-adt-update.html 网上解决方法主要有这几种 ...
- android 工程里缺少 R.java 文件原因和解决方法
作为新手,学习android 的时候难免要导入一些示例,目的为了更加了解android各种API用法,顺便也可以学习下别人代码的写法. 可是导入android源码后,基本都有错误,R.java也不会自 ...
- Android——Android studio项目中如何查看R.java文件(转)
Android Studio 是Google推出的一个Android开发环境,它集成了Android 开发工具用于开发和调试,类似 Eclipse ADT.Google公司停止对eclipse的后续支 ...
- 【android相关】【问题解决】R.java文件丢失
在进行android开发过程中,有时候,我们会遇到gen文件中R.java丢失的现象.重新build,或者clean工程,close并重新打开Project,但有时也没解决. 这可能是由于不小心把xm ...
- 关于android R.java文件无法创建的问题
R.java文件无法创建的原因网上有很多说法普遍是以下两种: 1. xml文件有错误: 解决方法就是找到哪个xml有错然后把错误修复就OK了. 2.编码问题 这时候只要把xml文件的编码改成utf8就 ...
- gen目录无法更新,或者gen目录下的R.JAVA文件无法生成
gen目录无法更新,或者gen目录下的R.JAVA文件无法生成 1.gen目录的用处 android gen目录下的R.java并不是由用户创建,而是android工程本身将android的资源进行自 ...
- R.java 文件内报错:Underscores can only be used with source level 1.7 or greater。
R.java 文件内报错:Underscores can only be used with source level 1.7 or greater 网上查找后得知是Android工程图片资源命名的问 ...
随机推荐
- DRUPAL点滴
1 admin/config/user-interface/xxx在hook_menu里定义这样一个path,就会在configuration界面看到xxx的链接 2 $news_items = db ...
- 【转】 Linux 线程同步的三种方法
线程的最大特点是资源的共享性,但资源共享中的同步问题是多线程编程的难点.linux下提供了多种方式来处理线程同步,最常用的是互斥锁.条件变量和信号量. 一.互斥锁(mutex) 通过锁机制实现线程间的 ...
- Timer与TimerTask的真正原理&使用介绍
转载: Timer与TimerTask的真正原理&使用介绍 其实就Timer来讲就是一个调度器,而TimerTask呢只是一个实现了run方法的一个类,而具体的TimerTask需要由你自己来 ...
- python 练习 19
#!/usr/bin/python # -*- coding: UTF-8 -*- for n in range(100,1000): i = n / 100 j = n / 10 % 10 k = ...
- VMware Workstation 12 Pro虚拟机下载(含序列号)
VMware Workstation 12 Pro 官网下载地址:http://www.vmware.com/products/workstation/workstation-evaluation V ...
- postgresql 索引
1.B-tree索引 create index idx_contacts_name on contacts(name); 2.数组索引 create index idx_contacts_phone ...
- 理解模数转换器的噪声、ENOB和有效分辨率
ADC的主要趋势之一是分辨率越来越高.这一趋势影响各种应用,包括工厂自动化.温度检测和数据采集.对更高分辨率的需求正促使设计者从传统的12位逐次逼近寄存器(SAR)ADC转至分辨率高达24位的Δ-ΣA ...
- 张艾迪(创始人):发明Global.World.224C的天才
Eidyzhang: Genius.Founder.CEO.23 I 世界级最高级创始人.世界最高级FounderCEO 出生在亚洲中国.Eidyzhang 拥有黑色头发白色皮肤(20岁)大学辍学生. ...
- IO流--字节流
import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.FileInputStream; import ...
- Jquery操作select小结
每次操作select都要查资料,干脆总结一下. 为select设置placeholder <select class="form-control selOP" placeho ...