8.1 Android应用资源体系

了解Android应用资源的基本构成和特点,是学习使用应用资源的第一步。只有明确了应用资源的设计和架构,才能做到信手拈来,应用自如。

8.1.1 Android的应用资源构成

Android的应用资源可看作是由如下三部分构成的:XML资源文件、数据资源文件和资源目录(XML资源文件和数据资源文件,可统称为资源文件)。

XML资源文件是应用资源中最重要的组成部分,它由一系列特定格式的XML文件组成,用来存储应用所需的字符串、界面样式和颜色等交互界面相关的信息。XML是结构化的描述语言,与Java等编程语言相比,它更适合描述结构化的界面信息,更易于构造可视化的界面工具(因为XML比Java更容易解析)。更重要的是,通过XML资源文件,可以将界面相关的信息从代码中独立出来,使界面构造和底层逻辑隔离开来,降低彼此的耦合度,也使得它们能够独立进行变化,从而提升应用的可维护性。

在本书中,将XML资源文件分成两类,一类定义为列表型xml资源文件,该类型的每个资源文件都存储了多个资源项,比如:字符串文件strings.xml就是列表型XML资源文件,其中存储了多个字符串信息。从命名规则来看,列表型XML资源文件在命名上与资源目录的命名规范基本一致。

另外一类XML资源文件,定义为值类型XML资源文件。该类别的每个资源文件,都仅代表一个资源项,比如:在资源目录layout中的界面资源文件都是值类型XML资源文件,每一个资源文件都是一个资源项,它的使用方式与数据资源文件类似。

而数据资源文件,指的是应用中需要使用的图像文件、音频文件、视频文件及其他格式的数据文件,每个数据资源文件都对应着一个资源项。

所有的XML资源文件和数据资源文件,都放置在Android定义的资源目录当中。每个资源目录,都会用来存储相同或相近类别的资源文件,比如,资源目录layout中,会放置描述界面信息的XML资源文件。

所有的数据资源文件,集中存放在资源目录drawable或raw中。drawable目录中可以放置各种格式的图像文件,开发者可以通过R类进行访问[1];而在raw目录内,可以放置任意数据格式的文件,通常通过Resources.openRawResource函数进行读取。完整的资源目录信息,可参见表8-1。

小贴士 值得注意的是,在Android应用中,asset目录也是用于存储应用所需数据文件的地方,与raw目录中的文件不同,asset目录并不属于Android资源系统的一部分,因此它不支持资源的适配。但asset中可以包含自定义的多级目录结构(raw目录中不能放置子目录),不仅可以通过android.content.res.AssetManager对象对其进行读取,也可以利用Uri直接定位到其中的文件。

除了资源目录的命名需要遵循规范,资源文件的命名也有所约定,所有的应用资源文件命名必须是小写的。并且,对于列表型XML资源文件而言,它的命名也必须依照规则,比如:所有的字符串信息,都存放在values资源目录中名为strings.xml的资源文件中[2]

8.1 Android应用资源体系 - 图1

8.1 Android应用资源体系 - 图2

[1]本章后续内容会继续介绍R类。

[2]在这里,暂时不考虑资源适配的问题。

[3]参考SDK文档:http://androidappdocs.appspot.com/guide/topics/resources/providing-resources.html。