* 作 者: 雷恒鑫
* 完成日期: 2012 年 08 月 5 日
* 版 本 号: V1.0
* 对任务及求解方法的描述部分
* 输入描述:
* 问题描述:
* 程序输出:
* 程序头部的注释结束
*/
①首先来谈一下android:id的属性:
先看一下代码(想看源代码请点击这里...): <EditText android:id="@+id/height"
/>
“@”符号是提示XML解析器应该把后面的字符串解析成标识符号。
“+”符号代表将添加一个标识符号。
“id/”表示这个标志符号会被归类在“id”下面。
“height”是这个界面组件的"android:id"。在以后的程序中,会使用“R.id.height”来取得这个界面的组件。
"@+id/height"的意思是我们在此创建了名为“height”的标识符,可以通过这个标识符来控制所对应的界面组件。
“R”类会自动配置一个地址给这个界面的组件。
“R”类的内容,可以通过查看“R.java”文件可知。
②然后再说一下XML说明文件与R.java资源文件:
在Android系统中,使用XML来定义显示界面(UI),虽然用XML来描述界面固然方便,但是对于手机程序来说直接用XML文件太占内存空间了 ,所以“Android”系统并不直接使用XML文件,而是通过“Android开发工具”自动将XML说明文件转换成资源文件。一旦应用程序要使用某个界面或是任何类的资源(字符串、图片、图标、音效...…),都使用索引来查询。
当我们创建好一个“BMI”新项目,尚未作出任何修改时,打开位于“gen/com/demo/android/bmi”目录下的“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.demo.android.bmi; public final class R { public static final class attr { } public static final class drawable { public static final int icon=0x7f020000; } public static final class layout { public static final int main=0x7f030000; } public static final class string { public static final int app_name=0x7f040001; public static final int hello=0x7f040000; } }
在照着前一章的说明添加了几条XML说明后,在此打开位于“gen/com/demo/android/bmi”目录下的“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.demo.android.bmi; 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 height=0x7f050000; public static final int result=0x7f050003; public static final int submit=0x7f050002; public static final int suggest=0x7f050004; public static final int weight=0x7f050001; } public static final class layout { public static final int main=0x7f030000; } public static final class string { public static final int app_name=0x7f040001; public static final int hello=0x7f040000; } }
我们看到在“R.java”文件中,分别有“attr”(属性)、“drawable”(图片、图标)、“id”(标识符号)、“layout”(界面布局)、“string”(字符串)这几种资源类型。就XML说明文件中的“id”来说,开发工具会根据XML说明文件中指定的“id”,生成对应的资源,并自动指定一个地址。
③将字符串抽离XML
当我们在“res”文件夹中添加一个XML文件,或是一张图片时,“Android开发工具”扩展包会从“res”文件夹中搜集各种资源文件,并将各种资源文件汇总成一个索引,自动生成“R.java”文件。
通过这个特性,可以进一步加工我们的XML说明文件,将其中的文字描述部分抽取出来,让界面更容易维护。
打开“res/values/strings.xml”文件,原始内容为:
<?xml version="1.0" encoding="utf-8"?> <resources> <string name="hello">Hello World, Bmi!</string> <string name="app_name">BIM</string> </resources>
里面定义了“hello”、“app_name”两个字符串,“hello”字符串解答在前一篇博文里,只要在“android:text”中添加神秘的“@string/hello”参数,屏幕中就能显示出“Hello Word Bmi!”。
其中“app_name”字符串用来表示应用程序。
我们看到表示字符串的格式为: <string name="标识代号">文字描述</string>
我们将上一篇博文中的说明抽取出来,添加进“strings.xml”文件中。
完整的“strings.xml”文件如下:
<?xml version="1.0" encoding="utf-8"?> <resources> <string name="app_name">BIM</string> <string name="height">身高(cm)</string> <string name="weight">体重(kg)</string> <string name="bmi_btn">计算 BMI 值</string> <string name="bmi_result">你的 BIM 值是</string> </resources>
“strings.xml”文件中,我们在原本的“app_name”字符串外,自行定义了另外几个字符串。如果再次打开“R.java”文件,我们会发现文件里的“string”类中,也自动索引了上面定义好的字符串:
public static final class string { public static final int app_name=0x7f040000; public static final int bmi_btn=0x7f040003; public static final int bmi_result=0x7f040004; public static final int height=0x7f040001; public static final int weight=0x7f040002; }
接着我们把这些字符串应用到之前定义好的XML说明文件中,通过使用 @string/[标识符号]
这样访问“string”类的格式,来替换“main.xml”文件中原本的文字说明。
完整的代码如下:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/height" /> <EditText android:id="@+id/height" android:layout_width="fill_parent" android:layout_height="wrap_content" android:numeric="integer" android:text="" /> <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/weight" /> <EditText android:id="@+id/weight" android:layout_width="fill_parent" android:layout_height="wrap_content" android:numeric="integer" android:text="" /> <Button android:id="@+id/submit" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/bmi_btn" /> <TextView android:id="@+id/suggest" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="" /> </LinearLayout>
运行结果:
这个界面和前几篇博文的界面完全相同。就界面而言,将说明字符串统一集中在“strings.xml”说明文件之后,以后要修改界面时,就更加有弹性了。
至此,已经完成了“BMI应用程序”负责“显示”(View)的部分。
④新增XML文件:
在上面的代码中只修改到开发工具帮我们产生的文件,而事实上,所有在“res”目录中所做的修改,开发工具都会自动收索,将之添加到“R.java”中。因此也可以在“src/values”中创建自己的独立文字说明文件。
下面就在“src/values”目录中新创建一个“advice.xml”文件,文件里面将包含“BMI程序”算出“BMI值”后将给予的建议文字。完整的文件如下:
<?xml version="1.0" encoding="utf-8"?> <resources> <string name="advice_light">你该多吃点</string> <string name="advice_average">体型很棒哦</string> <string name="advice_heavy">你该节食了</string> </resources>
编辑好上面的文件后,再次打开“R.java”文件,会发现 "advice_light" "advice_average" "advice_heavy" 也已经添加进”R.java“文件的索引中,以供程序调用。
下一篇博文将开始写“Android程序流程”部分。