Android开发--身高体重指数(BIM)计算--访问标识符号(android:id属性/XML说明文件与R.java资源文件/将字符串抽离XML/新增XML文件)

/* (程序头部注释开始)
* 程序的版权和版本声明部分
* Copyright (c) 2011, 烟台大学计算机学院学生
* All rights reserved.
* 文件名称:访问标识符号的含义及其使用

* 作 者: 雷恒鑫
* 完成日期: 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>




运行结果:

Android开发--身高体重指数(BIM)计算--访问标识符号(android:id属性/XML说明文件与R.java资源文件/将字符串抽离XML/新增XML文件)_第1张图片

 

这个界面和前几篇博文的界面完全相同。就界面而言,将说明字符串统一集中在“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程序流程”部分。

你可能感兴趣的:(android,xml,String,layout,Class,开发工具)