你刚刚完成的“Hello, World”的例子使用的是我们称为“可编程”的UI层,意思是你通过编写代码来组建UI层。当你开发了足够多的UI程序,你会发现一些很糟糕的现象:一些小的变化需要你做大量的代码改动。你常常会忘记将View连接起来,这样会导致一些错误,浪费你很多时间去调试代码。
这就是Android为什么提供一个可变化的UI开发模块:基于XML的文件。最简单解释这个概念就是演示个例子。这里有个XML的文件,它能达到和你刚才完成代码同样的效果:
<?xml version="1。0" encoding="utf-8"?> <TextView xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:text="Hello, Android"/>
通常Android里XML文件结构是很简单的。只是一些标记的树形集合,每个标记就是一个视图类。在这个例子中,它就是一个简单的 TextView元素的树,你可以在XML文件里使用任何扩展类的名字作为你的标记,这也包括你在你的自己的代码里定义的名字。这个结构使得你能使用简单结构和语法快速的组建UI,这种模型就像网站的开发模型,你能够将UI和程序逻辑分开,单独获取或者填充数据。
在这个例子里,有4个XML属性,下面是属性的大概意思:
属性 | 描述 |
xmlns:android | 这是一个XML命名空间,告诉Android开发工具你准备使用Android命名空间里的一些通用属性。在所有Android XML设计文件中最外层的标记必须使用这个树形。 |
android:layout_width | 这个属性定义了这个视图需要占用的屏幕宽度。在这个例子中,我们仅有的一个视图可以占用整个屏幕,那就是“fill_parent”的意思。 |
android:layout_height | 这个和“layout_width”差不多,表示占用屏幕的高度。 |
android:text | 这个设置文本显示内容,在这个例子里,我们使用“Hello,Android”。 |
这就是XML的布局,你需要把这个文件放在什么位置? 放在你的工程/res/layout下就可以。“res”是“resource”的简称,这个目录包含了所有应用程序需要的非代码部分。比如图片、字符串、XML文件。
Eclipse插件为你创建了这些XML文件中的一个。在我们上面的范例,我们根本没有使用过它。在包的管理器里,展开目录/res/layout,编辑main.xml文件,替换上面的文本然后保存修改。
在从代码目录里打开 R.java文件,你可以看到他们像这样:
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=0x7f040000; }; };
R.java是文件中所有资源的索引界定值定义。你在代码中使用这个类,就像在你的项目里使用一个简洁的方法表示你的资源。在Eclipse这样的IDE工具里,这个方式对于代码自动完成功能还是非常有效的,因为这能让你快速得定位你要寻找的东西。
有个重要点需要注意的是有个内部类“layout”,是“main”的成员类。Eclipse插件提醒你加了一个新的XML文件,然后生成R.java文件,当你加入其他资源到你的工程里,你可以看到R.java在同步更改。
最后要做的就是使用你最新版本的XML修改你的HelloAndroid代码去代替以前的编码。 这个有例子说明重新写过的类的模型,你可以看到,代码变得非常简单:
package com.android.hello; import android.app.Activity; import android.os.Bundle; public class HelloAndroid extends Activity { /** Called when the activity is first created */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); } }
当你做这些修改的时,你只需要拷贝、复制。在那个R的类里你可以使用代码自动完成功能,你会发现那确实很有帮助。
现在你已经完成了这些修改,继续执行你的程序-你需要做的就是按下绿色的“Run”按钮,或者在菜单中选择Run->Run History->Hello,Android。 你可以看到… 哇哦,和之前看到的一样!这点表明两种不同的构建方式都能达到同样的结果。
还有很多方法去创建XML文件,在你想做之前。 读一下 实现用户接口 可以获得更多信息。