Android应用资源可分为两大类:
- 无法通过R清单类访问的原生资源,保存在assets目录下。
- 可通过R资源清单类访问的资源,保存在res目录下。
大部分时候提到Android应用资源时,往往都指位于res目录下的应用资源,AndroidSDK会在编译该应用时在R类中为它们创建对应的索引项。
资源的类型以及存储方式
Android要求在res目录下用不同的子目录保存不同的应用资源,表6.1大致显示了Android不同资源在/res目录下的存储方式。
表6.1 Android应用资源的存储
目录 | 存放的资源 |
/res/animator/ | 存放定义属性动画的XML文件 |
/res/anim/ | 存放定义补间动画的XML文件 |
/res/color/ | 存放定义不同状态下颜色列表的XML文件 |
/res/drawable/ | 该目录下存放各种位图文件(如*.png、*.9.png、*.jpg、*.gif等)。除此之外也可是能编辑成如下各种Drawable对象的XML文件:
|
/res/layout/ | 存放各种用户界面的布局文件 |
/res/menu/ | 存放为应用程序定义各种菜单的资源,包括选项菜单、子菜单、上下文菜单资源 |
/res/raw/ | 该目录下存放任意类型的原生资源(比如音频文件、视频文件等)。在Java代码中可通过调用Resources对象的openRawResources(int id) 方法来获取该资源的二进制输入流。实际上,如果应用程序需要使用原生资源,推荐把这些原生资源保存到/assets目录下, 然后在应用程序中使用AssetManager来访问这些资源。 |
/res/values/ | 存放各种简单的XML文件。这些简单值包括字符串值、整数值、颜色值、数组等。字符串值、整数值、颜色值、数组等各种值都存放在该目录下,而且这些资源文件的根元素都是<resources.../>元素,当我们为该<resources.../>元素添加不同的子元素则代表不同的资源,例如:
由于各种简单值都可定义在/res/values目录下的资源文件中,如果在同一份资源文件中定义各种值,势必增加程序维护的难度。为此,Android建议使用不同的文件来存放不同类型的值,例如,
|
/res/xml/ | 任意的原生xml文件。这些XML文件可在Java代码中使用Rsources.getXML()方法进行访问 |
一旦将应用程序的各种资源分别保存在Android应用的/res目录下,接下既可以在Java程序中使用这些资源,也可以在其他XML资源中使用这些资源。