[Android学习笔记]资源(resources)的使用和重点

顺便推荐一本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.*。

你可能感兴趣的:(android,xml,UI,框架)