1、 第 1 页 共 35 页 Android 起航 译 使用 XML进行布局 虽然纯粹通过 Java代码在 activity上创建和添加部件,在技术上是可行的,我们在第 4章中做的一样,更常见的方法是使用一种基于 XML的布局文件。动态的小部件实例保留更多,情况复杂,小工具在编译时不为人所知(例如,在数据检索了互联网基础上将单选按钮填充柱。 考虑到这一点,现在是时候打破 XML来学习如何用此种方式来布置 Android activities。 什么是基于 XML的布局? 正如其名称所示,一个基于 XML的布局是一个关系到每个规格的小部件,和他们的容器(更 多关于此内容的在第 7章)编码的 XML
2、格式。具体来说, Android认为基于 XML的布局是资源,因此布局文件存储在 res /在你的 Android项目布局目录中。 每个 XML文件包含一个指定的部件和容器布局元素树,一种意见认为构成层次。对 XML元素的属性,描述一个部件应如何看或者一个容器应如何运转。例如,如果一个按钮元素。 有一个 Android的属性值:文字样式 =“ bold”,这意味着该文本出现在按钮的表面应该是呈现一个粗体字体样式 . Android的 SDK中附带一个使用的布局的工具( aapt)。这个工具应自动 调用你的 Android工具链(例如, Eclipse中, Ant s build.xml)。作为
3、一个开发人员,尤其重要的是,在您的项目中 aapt生成 R.java源文件,让您能在那些布局中直接从 Java代码中获取布局和部件。 为什么使用基于 XML的布局? 使用 XML布局文件做的大部分都可以通过 Java代码。例如,你可以使用setTypeface()命令一个按钮使用粗体文本,而不是在一个 XML布局中使用属性。由于 XML布局是为你跟踪的另一个文件,所以我们需要好的理由来使用这样的文 第 2 页 共 35 页 件。 也许最大的原因是为了在视图定义 中协助工具的建立,如 IDE中一个 GUI创建者像 Eclipse或者一个像 DroidDraw1设计 GUI图形用户界面建设者。这样
4、 GUI建设者们,在原则上,生成 Java代码而不是 XML。目前的挑战是重新阅读用户界面的定义,以支持编辑,也就是说, 如果是像 XLM的结构公式数据比一个程序语言中的数据简单的多。此外,保持生成的 XML定义从手写的 Java代码中分离,使得某人定制的来源意外重新生成不太可能。 XML形成一个良好的中间立场,使工具作家使用更简便,程序员需要时手工工作更简易。 此外, XML作为一个 GUI定义格式 是越来越普遍。微软的 XAML, Adobe的 Flex,和 Mozilla的 XUL都采取 Android类似的方法:把布局细节放在一个 XML文件和把编程智慧资料放在源文件(例如, XUL中
5、的 JavaScript)。许多不太知名的图形用户界面框架,如 ZK,还使用视图定义的 XML。而“随大流”并不一定是最好的政策,但他们有优势帮助从任何其他 XML为中心的观点描述语言轻松进入 Android。 好了,那么基于 XML的布局是什么样子的? 下面是以前的章节的示例应用程序按钮,转换成一个 XML布局文件,布局 / NowRedux示例 项目,在这一章中可以找到源代码的 http:/领域。 部件,按钮的类名称形成 XML元素的名称。因为按钮是 Android提供的部件,我们可以只使用裸类的名称。如果您创建自己的部件作为 android.view.View子小部件,您也将需要提供一个
6、完整的包声明(如monsware.android.MyWidget)。 根元素需要 Android的 XML命名空间声明: xmlns:android=http:/ 第 3 页 共 35 页 所有其他要素将成为子根并继承该命名空间的声明。 因为我们要引用 这个来自 Java代码的按钮,我们需要通过 android给它一个标识符: id属性。我们将在本章后面更详细的介绍这个概念。 其余的属性是此按钮实例属性: android:文字表示的初始文本将显示在按钮(这种情况显示空字符串) android: layout_width和 Android: layout_height命令 android有按钮
7、的 宽度和高度填写 “ parent”,这种情况下,整个屏幕。将这些属性将在第 7章中详解。 由于这个单一部件是 activity的仅有 内容,我们只需要这一个因素。复杂的用户界面将需要 整个树的元素,代表工具和容器,控制自己的定位。所有的这本书余下的章节将使用 XML布局,所以还有数十种更复杂的其他布局实例,请前进到第七章仔细阅读。 符号有什么用途? 许多部件和容器只需要出现在 XML布局文件,不须引用在 Java代码。例如,一个静态标签( TextView)只需要在布局文件中以表明它应该出现在那里。在 XML文件中各种元素文件不需要有 android: id属性给他们一个名称。 任何你想要
8、在 Java资源中使用的东西,都需要一个 android: id. 该公约是使用 +id.作为 ID值,其中的 .代表你 locallyunique名称有问题的部件。在上一节的 XML布局的例子中, +id是按钮控件的标识符。 android提供了一些特殊的 android: ID值,形式 android: id/.我们将在这本书的不同章节中看到这些,例如第八章和第十章。 我们将这些附加到 Java 如何? 既然你有意建立一个 XML配置文件的工具和容器,名为 main.xml存储res/layout,所有你需要的是一个在您 activity的 OnCreate()回调以使用该版式: setContentView( R.layout.main) ; 这是相同的 setContentView(),我们前面使用,通过它的一个视图子类的实例(在这种情况下,一个按钮)。该 android制造的观点,来自我们的布局,是从访问该代码生成的 R类。所有的布局都可以访问 R.layout,由基地键控布局文件的名称 - main.xml result in R.layout.main. 要访问确定部件,使用 findViewById(),在数字标识符传递有问题的部件。