顺便推荐一本Android入门的好书,不过目前只有英文版的,书名是Pro Android 2.
几乎所有的UI 框架(UI framworks)都会使用到资源,但Android有些不同,他用到了R.class类来把资源IDs和资源联系在一起,这是一种快速访问资源的能力。在开发中我们会用到的关键资源类型有
Resource Type
Location
Description
------------------------------------------------------------------------------------------
Strings
Colors
Dimetions
/res/values/any-file.xml
/res/values/any-file.xml
/res/values/any-file.xml
标签属性名名称(name="你给的名称")就是代表该资源的ids
表示颜色的标识符(color identifiers)指向颜色代码(color codes),在any-file.xml文件中,表示颜色的XML节点是/resources/color,即颜色由资源标签(tag)<color>定义,定义后的颜色ids出现在R.class中作为R.color.*。
表示字符串资源。除了简单的字符串外,字符串资源还允许使用java语言中的格式化字符串以及原始html.这些字符串资源的ids出现在R.class中作为R.string.*,他们在文件中的XML节点是/resources/string。
表示在Android中的各种元素或视图的大小(size)或尺寸(dimention),在any-file.xml文件中的节点是/resources/dimen,相应地其ids在R.class中生成R.dimen.*。
注意,为了方便,我们往往把程序用到的所有字符串资源定义在一个strings.xml文件中,其实,我们可以在任意多个any-file.xml文件中定义string、color、dimen资源,其中只要确保资源ids的唯一性,以及使用对应的资源标签(如<color>定义颜色),否则,编译时出错,也不能生成相应的R.class文件(R.class文件是不可以人为编辑的,即使可以,只要在/res下的子目录中的文件发生改变,系统会依据/res中的各种资源文件自动生成/更新R.class文件)。
代码例子:
/res/values/strings.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="hello1">Hello</string>
</resources>
/res/values/strings1.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="hello2">Hello</string>
</resources>
在两个资源文件中我们为字符串Hello定义了两个不同的ids,相应的在R.class中生成R.string.hello1和R.string.hello2。
也可以这样
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="hello2">Hello</string>
<color name="white">#ffffffff</color>
<drawable name="white">#ffffffff</color>
</resources>
系统会自动读取/res/value目录下的所有文件,根据资源标签来生成做为R.class中的R.*.ids.
Resource Type
Location
Description
------------------------------------------------------------------------------------------
Images
/res/drawable/multiplefiles
Color Drawable
/res/values/any-file或是/res/drawable/multiplefiles
任意的XML文件(XML Files)
/res/xml/*.xml
任意的原始文件(Raw Resources)
/res/raw/*.*
任意的原始资源(Raw Assets)
assets/*.*/*.*
在Android中,只有/assets允许建立其他的子目录,而且任意深度的目录结构下的文件都可以被Android访问。
在Android中,资源编译器会把除了/res/raw和/assets目录以外的所有资源文件编译成二进制文件。
对于image资源,Android支持的图片格式有jpg、png、gif等,而且/res/drawable/下的每个image会以文件名做为R.class里R.drawable.*中的ids。
/res/values子目录中的<drawable>资源标签,表示颜色的矩形将用于视图的背景或是用做单一色的bitmap,就好像在java中创建一个有色的矩形并把它设置成视图的背景,对应的,其定义节点是/resources/drawable,在R.class中生成R.drawable.*。Android也支持定义圆角矩形和梯形矩形,通过在/res/drawable子目录下定义一个xml文件,该xml的根标签(root xml tag)是<shape>。该xml的文件名被转换成唯一的ids放于R.drawable.*中指代。
Android也允许任意的XML文件做为资源,这些文件会被aapt编译器编译成为二进制文件,其定义在/res/xml中,xml文件名做为ids放于R.xml.*。