Android实战技巧:使用原始资源文件
背景知识介绍
与其他平台的应用程序一样,Android中的应用程序也会使用各种资源,比如图片,字串等,会把它们放入源码的相应文件夹下面,如/res/drawable, /res/xml, /res/values/, /res/raw, /res/layout和/assets。Android也支持并鼓励开发者把UI相关的布局和元素,用XML资源来实现。总结起来,Android中支持的资源有:
颜色值 /res/values 以resources为Root的XML文件,定义形式为<color name>value</color>
字串 /res/values 以resources为Root的XML文件<string name>value</string>
图片 /res/drawable 直接放入,支持9 Patch可自由拉伸
图片的颜色 /res/values 以resources为Root的XML文件,定义形式为<drawable name>value</drawable>
单位资源 /res/values 以resources为Root的XML文件<dimen name>value</dimen>
菜单 /res/menu 以menuo为root的XML文件
布局 /res/layout 这个就是GUI的布局和元素
风格和主题 /res/values 以resources为Root的XML文件<style name>value</style>
动画 /res/anim 有二种:一个是帧动画(frame animation),也就是连续变换图片以animation-list为Root的XML文件;另外一种就是补间动画(tweened animation),它对应于API中的Animation和AnimationSet,有translate、scale、rotate、alpha四种,以set为root来定义,这个set就相当于AnimationSet
再说下目录: www.zzzyk.com
/res/anim 用于存放动画
/res/drawable 存放图片,或等同于图片的资源如shape,或selector
/res/menu 存放Menu
/res/values 存放修饰性资源:字串,颜色,单位,风格和主题
/res/layout 存放UI布局和元素
/res/raw 存放运行时想使用的原始文件
/assets 存放运行时想使用的原始文件
除了原始文件目录/res/raw和/assets以外,其他的资源在编译的时候都会被第三方软件aapt进行处理,一个是把图片和XML文件进行处理,例如把XML编译成为二进制形式;另外处理的目的就是生成R.java文件,这个文件是访问资源时必须要用到的。
/res目录下面的所有文件都会映射到R.java文件中,以整数Id的形式被标识,相同类型的资源被一个内部类来封装,一个R.java的文件类似于这样:
/* AUTO-GENERATED FILE. DO NOT MODIFY.
*
* This class was automatically generated by the
* aapt tool from the resource data it found. It
* should not be modified by hand.
*/
package com.android.explorer;
public final class R {
public static final class attr {
}
public static final class drawable {
public static final int icon=0x7f020000;
}
public static final class id {
public static final int action=0x7f060004;
public static final int description_panel=0x7f060001;
public static final int fileinfo=0x7f060003;
public static final int filename=0x7f060002;
public static final int linearlayout_test_1=0x7f060005;
public static final int linearlayout_test_2=0x7f060006;
public static final int linearlayout_test_3=0x7f060007;
public static final int thumbnail=0x7f060000;
}
public static final class layout {
public static final int fileant_list_item=0x7f030000;
public static final int linearlayout_test=0x7f030001;
}
public static final class raw {
public static final int androidmanifest=0x7f040000;
}
public static final class string {
public static final int app_name=0x7f050001;
public static final int hello=0x7f050000;
}
}
从这个R.java就可看出在/res中定义或提供资源时的注意事项:
1. 同一个类型,或同一文件夹下面的资源不可以使用相同的文件名,也就是说不能用文件扩展名来区别不同的文件,因为R.java中只保留资源的文件名而不管扩展名,所以如果有二个图片一个是icon.png另一个是icon.jpg,那么在R.java中只会有一个R.drawable.icon。另外一个则会无法访问到。
2. 资源文件的名字必须符合Java变量的命名规则,且不能有大写,只能是'[a-z][0-9]._',否则会有编译错误,因为R.java中的变量Id要与资源中的文件一一对应,也就是说用资源文件名来作为Id的变量名,所以一定要符合Java变量的命名规则,另外它还不能有大写。
3. 除了SDK支持的folder外,不能再有子Folder,虽不会有编译错误,但是子Folder会被完全忽略,如在/res/layout下在建一个子Folder activity(/res/layout/acitivity/, 那么你在生成的R.java中是看不到activity和其内的内容的。
4. 对于资源文件的大小有限制,最好不要让单个文件大于1M,这是SDK文档说明的限制,但具体的我没有进行试验(据说2.2版本以后的可支持到10M,不知道是真的还是假的)
5. 所有/res下面的资源都能通过Resources()并提供Id来访问。
使用原始资源
对于大多数资源在编译时会对文件内容进行特殊处理,以方便Apk在运行时访问。 如果想要运行时使用未经处理的原始资源,可以把资源文件放
补充:移动开发 , Android ,