java 创建资源文件_资源文件详解(一)生成资源类文件(R.java)

本文详细介绍了Android应用中资源的使用,包括XML资源文件和Java代码中的访问方式。资源通过R.java类进行访问,该类由系统自动生成,包含了如drawable、layout、string等资源的静态final int变量,这些变量作为资源ID可以直接引用资源。当res目录中的资源发生改变时,ADT会更新R.java。此外,还提到了如何使用aapt命令手动生成R.java文件。
摘要由CSDN通过智能技术生成

10.2  使用资源

Android应用中的资源可以在XML资源文件中使用,也可以使用Java代码访问,而且系统中也自带了很多资源。本节将详细介绍这些资源的的各种访问方法。

10.2.1  生成资源类文件(R.java)

就像Map一样,任何资源都需要通过一个简单的值(key)来获得。而这个key就存在于本节要介绍的R类中。

R类(位于R.java文件中)是一个普通的Java类,R.java是由系统自动生成的(在Android工程的gen目录中),并不需要由开发人员维护。当res目录中的资源发生变化时(可能是添加新的资源,也可能是修改了某些资源的名字),ADT会使用res目录中的资源来同步R类。在解释R类之前,我们先来看一个简单R类。

package mobile.android.first;

public final class R {

//  数组资源

public static final class array {

public static final intincall_refuse_mode_entries=0x7f090001;

public static final intincall_refuse_mode_entry_values=0x7f090002;

}

//  颜色资源

public static final class color {

public static final intdivider=0x7f060000;

public static final inttranslucent_background=0x7f060001;

}

//  图像资源

public static final class drawable {

public static final intabout=0x7f020000;

public static final intface=0x7f020078;

}

//  定义控件、菜单时指定的ID

public static final class id {

public static final intbody_linearlayout=0x7f0b004e;

public static final intbtnCancel=0x7f0b0007;

public static final intbtnChat=0x7f0b0075;

}

//  布局资源

public static final class layout {

public static final intabout=0x7f030000;

public static final intadd_black_list=0x7f030001;

public static final intadd_email=0x7f030002;

}

//  字符串资源

public static final class string {

public static final intapp_name=0x7f070001;

public static final intbusy_sound=0x7f070018;

}

}

从这段代码可以看出,R类中包含了几个内嵌类,而且这几个内嵌类的类名似曾相识。根据这几个类可以得出一个结论:所有的资源对应的索引(Key)都是被封装在R类的内嵌类中的,而且大多数资源(除了values资源)对应的内嵌类都是以资源目录名作为类名的,如drawable、layout。

再看看R类中的每一个内嵌类,在这些类中都定义了若干个被定义为final的int类型变量 。实际上,这里的每一个常量(被声明为final的变量)都对应于一个资源。在编译Android应用时,系统会自动将这些常量与相应的资源一一对应。因此,我们可以直接使用这些常量来引用资源。

也许看到这,读者会产生一些更深入的问题:这些常量以及常量值是怎么来的呢?这些常量值是按着某些规则指定的,还是随便定义的?

首先强调一点,这些常量是由系统自动生成的,这是毋庸至疑的。在理论上,这些常量可以是任何int类型的值,但常量值必须对于当前的应用程序是唯一的。也就是说,当前常量的值不能与其他常量的值和系统资源对应的变量的值重复。不过我们一般并不需要管这些常量是如何取值的,只需要了解如何使用它们即可。

从表面上看,是ADT根据res目录中的资源自动生成R.java文件的,但实际上,ADT是通过aapt(Android Asset Packaging Tool )命令来生成R.java文件的。aapt.exe文件(Mac OS X和Linux的相应命令也叫aapt,但没有文件扩展名)位于/platform-tools目录中。如果想手工生成R.java文件,可以在Windows控制台中输入如下的命令。

aapt package -f -m -J d:\ -S res -I D:\sdk\android-sdk-windows_new\platforms

\android-12\android.jar -M AndroidManifest.xml

对于aapt命令至少应了解如下几点。

生成R.java文件需要在aapt后面加package或p。

-f命令行参数表示如果R.java文件已存在,会使用新的R.java文件覆盖旧的R.java文件。

-m命令行参数表示会在-J命令行参数指定的路径中生成由AndroidManifest.xml文件指定的包目录,而这个AndroidManifest.xml文件由-M命令行参数指定。

在执行上面的命令之前要确保当前目录有包含资源的res目录。读者可以将Android工程目录中的res目录单独复制到其他任何目录下,然后在res所在的目录执行上面的命令即可。

aapt命令需要使用Android SDK中的android.jar文件,因此,要使用-I命令行参数指定android.jar文件的具体位置。android.jar文件在Android SDK中可能存在多个,读者可以选择相应Android版本的android.jar文件。

如果只是生成R.java文件,AndroidManifest.xml文件包含顶层标签以及相应的属性即可,aapt会获取标签的package属性值作为要生成的包目录的目录名。例如,package属性值为mobile.android,那么执行上面的命令行,会在当前目录生成mobile/android目录。也就是说在mobile目录中包含了一个android目录,在android目录中包含了生成的R.java文件。

注意 R类中的常量可以有多种称谓,例如,资源ID、资源索引、key等。为了统一,在本书中将这些常量统称为资源ID。

转自: http://book.51cto.com/art/201311/418570.htm

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值