Android资源管理框架(Asset Manager)简要介绍

Android应用程序是将代码逻辑和界面资源进行分离的,Android应用程序资源可以分为两大类,分别是assets和res

assets

assets类资源放在工程根目录的assets子目录下,它里面保存的是一些原始的文件,可以以任何方式来进行组织。这些文件最终会被原装不动地打包在apk文件中。如果我们要在程序中访问这些文件,那么就需要指定文件名来访问。例如,假设在assets目录下有一个名称为filename的文件,那么就可以使用以下代码来访问它:

AssetManager am= getAssets();  
InputStream is = assset.open("filename");

res

res类资源放在工程根目录的res子目录下,它里面保存的文件大多数都会被编译,并且都会被赋予资源ID。这样我们就可以在程序中通过ID来访问res类的资源。res类资源按照不同的用途可以进一步划分为以下9种子类型:

  1. animator
  2. anim
  3. color
  4. drawable
  5. layout
  6. menu
  7. raw
  8. values
  9. xml

animator

animator这类资源文件呢是保存在res/animator目录下,主要呢是用来描述属性动画的,我做了一个属性动画总结,可以查看在animator目录下的文件如何使用

anim

这类资源文件呢是保存在res/anim目录下,主要呢是用来描述补间动画的,我做了一个补间动画总结,可以查看在anim目录下的文件如何使用,以及补间动画的属性

color

这类资源是以XML文件形式保存在res/color目录下,用描述对象颜色状态选择。例如,可以规定一个对象在不同状态下显示不同的颜色。对象的状态可以划分为pressed、focused、selected、checkable、checked、enabled和window_focused等7种。


<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:color="#d8d8d8" android:state_enabled="false" />
    <item android:color="#999999" android:state_pressed="true" />
    <item android:color="#999999" android:state_focused="true" />
    <item android:color="#666666" />
selector>

drawable

这类资源以XML或者Bitmap文件保存在res/drawable目录下,用来描述可绘制对象。例如,我们可以在里面放置一些图片(.png, .9.png, .jpg, .gif),来作为程序界面视图的背景图。注意,保存在这个目录中的Bitmap文件在打包的过程中,可能会被优化的。例如,一个不需要多于256色的真彩色PNG文件可能会被转换成一个只有8位调色板的PNG面板,这样就可以无损地压缩图片,以减少图片所占用的内存资源。

layout

这类资源是我们最常用的,通常以XML文件保存在res/layout目录下,主要用来编写应用程序界面布局

这类资源以XML文件保存在res/menu目录下,用来描述应用程序菜单,例如,Options Menu、Context Menu和Sub Menu

raw

这类资源以任意格式的文件保存在res/raw目录下,它们和assets类资源一样,都是原装不动地打包在apk文件中的,不过它们会被赋予资源ID,这样我们就可以在程序中通过ID来访问它们。例如,假设在res/raw目录下有一个名称为filename的文件,并且它在编译的过程,被赋予的资源ID为R.raw.filename,那么就可以使用以下代码来访问它:

Resources res = getResources();
InputStream is = res .openRawResource(R.raw.filename);

values

这类资源以XML文件保存在res/values目录下,用来描述一些简单值,例如,数组、颜色、尺寸、字符串和样式值等,一般来说,这六种不同的值分别保存在名称为arrays.xml、colors.xml、dimens.xml、strings.xml和styles.xml文件中。

xml

这类资源以XML文件保存在res/xml目录下,一般就是用来描述应用程序的配置信息。

注意,上述9种类型的资源文件,除了raw类型资源,以及Bitmap文件的drawable类型资源之外,其它的资源文件均为文本格式的XML文件,它们在打包的过程中,会被编译成二进制格式的XML文件。这些二进制格式的XML文件分别有一个字符串资源池,用来保存文件中引用到的每一个字符串,包括XML元素标签、属性名称、属性值,以及其它的一切文本值所使用到的字符串。这样原来在文本格式的XML文件中的每一个放置字符串的地方在二进制格式的XML文件中都被替换成一个索引到字符串资源池的整数值。这样做有两个好处:

A. 文件占用更小。例如,假设在原来的文本格式的XML文件中,有四个地方使用的都是同一个字符串,那么在最终编译出来的二进制格式的XML文件中,字符串资源池只有一份字符串值,而引用它的四个地方只占用一个整数值。

B. 解析速度更快。由于在二进制格式的XML文件中,所有的XML元素标签和属性等值都是使用整数来描述的,因此,在解析的过程中,就不再需要进行字符串解析,这样就可以提高解析速度

你可能感兴趣的:(Android)