首先介绍一下andorid的资源文件,认识这些资源文件对以后开发是必要的。
一、资源文件的管理
所有的Android应用程序都由两部分组成:功能代码和资源。功能代码决定应用程序的行为,它包括让应用程序得以运行的所有算法。资源包括文本字符串、图像和图标、音频文件、视频和其他应用程序使用的组件。
如果我们使用ADT开发的话,它为我们在后台自动调用AAPT编译资源,我们就可以省了很多事。不然的话,我们得使用AAPT自己去编译资源了。本文使用的是eclipse + ADT开发环境。资源目录截图图下图所示。
在res目录下的都是资源文件,用的多的是layout、values、drawable等。
资源目录的层级结构如下表所示,表中显示了Android SDK支持的资源类型以及它们在工程中的存储方式。
资源类型 | 所需的目录 | 文件名 | 适用的关键XML元素 | |
字符串 | /res/values/ | strings.xml(推荐) | <string> | |
字符串数组 | /res/values/ | arrays.xml(推荐) | <string-array> | |
颜色值 | /res/values/ | colors.xml(推荐) | <color> | |
尺寸 | /res/values/ | dimens.xml(推荐) | <dimen> | |
简单Drawable图形 | /res/values/ | drawables.xml(推荐) | <drawable> | |
位图图像 | /res/drawable/ | 例:.png,.jpg,red_oval.xml等等 | 支持的图形文件或XML文件定义的
Drawable图形 | |
动画序列(补间) | /res/anim/ | 例:fancy_anim.xml等等 | <set>、<alpha>、<scale>、<rotate>等 | |
菜单文件 | /res/menu/ | 例:my_menu.xml | <menu> | |
XML文件 | /res/xml/ | 例:some.xml | 由开发人员定义 | |
原始文件 | /res/raw/ | 例:xx.mp3,yy.txt等等 | ||
布局文件 | /res/layout/ | 例:main.xml等 | ||
样式和主题 | /res/values/ | 例:themes.xml | <style> |
AAPT贯穿所有在/res目录下正确格式化的文件,并且在目录/gen中生成类文件R.java,以访问所有变量。
R.java这个东东很有用,界面文件(即layout下面的定义的界面)和实现代码就是通过R.java联系的。
二、资源文件的创建
开发人员可以通过手工编写资源的XML文件,使用AAPT编译它们并生成R.java文件来定义简单的资源,推荐使用ADT插件。
创建完工程后,在Eclipse中定位至/res/values/strings.xml文件,双击可以编辑它。我们可以使用Resources标签下的Add按钮添加几个资源。也可以切换到源文件编辑模式。定义的如下:
1: <?xml version="1.0" encoding="utf-8"?>
2: <resources>
3: <string name="hello">Hello World, ActivityIntent!</string>
4: <string name="app_name">ActivityIntent</string>
5: <string name="prompt">The Activity and The Intent test!</string>
6: <string name="myButton">测试</string>
7: <string name="other">另一个Activity</string>
8: <string name="dialBtn">电话按钮</string>
9: </resources>
10: //个人认为,统一界面风格的时候可以用到,比如,我们把按钮btnOK的全部显示为“确定”,所有的按钮的宽度和高度设置好,可以定义这样一些的节点
11: <string name="btnOK">确定</string>
12: <string name="btnWidht">100px</string>
13: <string name="btnHeigh">25px</string>
这样子,我们在定义界面的时候,可以这样子写:
1: <Button android:text="@string/btnOK"
2: android:id="@+id/btnOK" //(注意这里的@+id/btnok,在R.java中有对应的ID,以后编写代码文件的时候,需要用到。)
3: android:layout_width="@string/btnWidth"
4: android:layout_height="@string/btnHeigh"
5: android:gravity="center" >
6: </Button>
保存Strings.xml文件。Eclipse插件讲将自动在你的工程中生成R.java文件,并含有适当的资源ID,以供编译之后使用程序访问这些资源。如果你定位到/gen/目录下的R.java文件,你可以看到:(所有的资源文件,都在R.java里面有对应)
1: public final class R {
2: public static final class attr {
3: }
4: public static final class color {
5: public static final int black=0x7f040001;
6: public static final int red=0x7f040000;
7: }
8: public static final class drawable {
9: public static final int androidmarker=0x7f020000;
10: public static final int blue=0x7f020006;
11: public static final int darkgray=0x7f020004;
12: public static final int exammislogo=0x7f020001;
13: public static final int icon=0x7f020002;
14: public static final int logo2=0x7f020003;
15: public static final int white=0x7f020005;
16: }
17: public static final class id {
18: public static final int btnClose=0x7f06000b;
19: public static final int btnOK=0x7f06000a;
20: public static final int btnOKOK=0x7f06000c;
21: public static final int edtName=0x7f060005;
22: public static final int edtPwd=0x7f060008;
23: public static final int imageViewLogo=0x7f060000;
24: public static final int linearLayout1=0x7f060001;
25: public static final int tableLayout1=0x7f060002;
26: public static final int tableRow1=0x7f060003;
27: public static final int tableRow2=0x7f060006;
28: public static final int tableRow3=0x7f060009;
29: public static final int textView1=0x7f060004;
30: public static final int textView2=0x7f060007;
31: }
32: public static final class layout {
33: public static final int loginsystem=0x7f030000;
34: public static final int main=0x7f030001;
35: public static final int myactivity=0x7f030002;
36: }
37: public static final class string {
38: public static final int EditTextHeigh=0x7f050007;
39: public static final int EditTextWith=0x7f050006;
40: public static final int app_name=0x7f050001;
41: public static final int btnClose=0x7f050004;
42: public static final int btnDelete=0x7f050005;
43: public static final int btnHeigh=0x7f050009;
44: public static final int btnOK=0x7f050002;
45: public static final int btnSave=0x7f050003;
46: public static final int btnWidth=0x7f050008;
47: public static final int hello=0x7f050000;
48: }
49: }
三、资源的读取
当我们创建好资源并保存后,我们变可以在程序用通过资源的ID来使用资源了。
比如说,我们获取资源ID为hello的内容:
1: String str = getResources().getString(R.string.hello);