绝对布局(AbsoluteLayout)能通过指定界面元素的坐标位置,来确定用户界面的整体布局。所谓绝对布局,是指屏幕中所有控件的摆放由开发人员通过设置控件的坐标来指定,控件容器不再负责管理其子控件的位置。由于子控件的位置和布局都通过坐标来指定,因此AbsoluteLayout 类中并没有开发特有的属性和方法。
绝对布局是一种不推荐使用的界面布局,因为通过X轴和Y轴确定界面元素位置后,Android系统不能够根据不同屏幕对界面元素的位置进行调整,降低了界面布局对不同类型和尺寸屏幕的适应能力。每一个界面控件都必须指定坐标(X,Y),例如图5-12中,“确认”按钮的坐标是(40,120),“取消”按钮的坐标是(120,120)。坐标原点(0,0)在屏幕的左上角。

图-1 绝对布局效果图
绝对布局示例在main.xml文件的完整代码如代码清单1所示。
代码清单1 main.xml
<?xml version="1.0" encoding="utf-8"?>
<AbsoluteLayout android:id="@+id/AbsoluteLayout01"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:android="//schemas.android.com/apk/res/android">
<TextView android:id="@+id/label"
android:layout_x="40dip"
android:layout_y="40dip"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:text="用户名:">
</TextView>
<EditText android:id="@+id/entry"
android:layout_x="40dip"
android:layout_y="60dip"
android:layout_height="wrap_content"
android:layout_width="150dip">
</EditText>
<Button android:id="@+id/ok"
android:layout_width="70dip"
android:layout_height="wrap_content"
android:layout_x="40dip"
android:layout_y="120dip"
android:text="确认">
</Button>
<Button android:id="@+id/cancel"
android:layout_width="70dip"
android:layout_height="wrap_content"
android:layout_x="120dip"
android:layout_y="120dip"
android:text="取消">
</Button>
</AbsoluteLayout>
上述涉及的界面布局(LinearLayout,TableLayout,RelativeLayout等)像其他控件一样也是一个控件。这意味着布局控件可以被嵌套。比如,为了组织屏幕上的控件你可以在一个LinearLayout中使用一个RelativeLayout,反过来也行。但是需注意在界面设计过程中,尽量保证屏幕相对简单,复杂布局加载很慢并且可能引起性能问题。
同时,在设计程序布局资源时需要考虑设备的差异性。通常情况下是可能设计出在各种不同设备上看着都不错的灵活布局的,不管是竖屏还是模屏模式。必要时可以引入可选布局资源来处理特殊情况。例如,可以根据设备的方向或设备是不是有超大屏幕(如网络平板)来提供不同的布局供加载。
Android SDK提供了几个可以帮助我们设计、调试和优化布局资源的工具。除了Eclipse的Android插件中内置的布局资源设计器,还可以使用Android SDK提供的Hierarchy Viewer(层次结构查看器)和layoutopt。这些工具在Android SDK的/tools目录下可以找到。可以使用Hierarchy Viewer来查看布局运行时的详细情况;可以使用layoutopt(布局优化)命令行工具来优化你的布局文件。优化布局非常重要,因为复杂的布局文件加载很慢。layoutopt工具简单地扫描XML布局文件并找出不必要的控件。在Android开发者网站的layoutopt部分查看更多信息。