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文件:

  • BitmapDrawable
  • NinePatchDrawable对象
  • StateListDrawable对象
  • ShapeDrawable对象
  • AnimationDrawable对象
  • Drawable的其他各种子类的对象

/res/layout/

存放各种用户界面的布局文件

/res/menu/

存放为应用程序定义各种菜单的资源,包括选项菜单、子菜单、上下文菜单资源

/res/raw/

该目录下存放任意类型的原生资源(比如音频文件、视频文件等)。在Java代码中可通过调用Resources对象的openRawResources(int id)

方法来获取该资源的二进制输入流。实际上,如果应用程序需要使用原生资源,推荐把这些原生资源保存到/assets目录下,

然后在应用程序中使用AssetManager来访问这些资源。

/res/values/

存放各种简单的XML文件。这些简单值包括字符串值、整数值、颜色值、数组等。字符串值、整数值、颜色值、数组等各种值都存放在该目录下,而且这些资源文件的根元素都是<resources.../>元素,当我们为该<resources.../>元素添加不同的子元素则代表不同的资源,例如:

  • string/integer/bool子元素:代表添加一个字符串值、整数值或boolean值。
  • color子元素:代表添加一个颜色值。
  • array子元素或string-array子元素、int-array子元素:代表添加一个数组。
  • style子元素:代表添加一个样式。
  • dimen:代表添加一个尺寸。
  • ...

由于各种简单值都可定义在/res/values目录下的资源文件中,如果在同一份资源文件中定义各种值,势必增加程序维护的难度。为此,Android建议使用不同的文件来存放不同类型的值,例如,

  • arrays.xml:定义数组资源。
  • colors.xml:定义颜色值资源。
  • dimens.xml:定义尺寸值资源。
  • strings.xml:定义字符串资源。
  • styles.xml:定义样式资源。    

/res/xml/                  

   任意的原生xml文件。这些XML文件可在Java代码中使用Rsources.getXML()方法进行访问

     一旦将应用程序的各种资源分别保存在Android应用的/res目录下,接下既可以在Java程序中使用这些资源,也可以在其他XML资源中使用这些资源。