絕對布局(AbsoluteLayout)能通過指定界面元素的坐標位置,來確定用戶界面的整體布局。所謂絕對布局,是指屏幕中所有控件的擺放由開發(fā)人員通過設置控件的坐標來指定,控件容器不再負責管理其子控件的位置。由于子控件的位置和布局都通過坐標來指定,因此AbsoluteLayout 類中并沒有開發(fā)特有的屬性和方法。
絕對布局是一種不推薦使用的界面布局,因為通過X軸和Y軸確定界面元素位置后,Android系統(tǒng)不能夠根據不同屏幕對界面元素的位置進行調整,降低了界面布局對不同類型和尺寸屏幕的適應能力。每一個界面控件都必須指定坐標(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="http://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提供了幾個可以幫助我們設計、調試和優(yōu)化布局資源的工具。除了Eclipse的Android插件中內置的布局資源設計器,還可以使用Android SDK提供的Hierarchy Viewer(層次結構查看器)和layoutopt。這些工具在Android SDK的/tools目錄下可以找到?梢允褂肏ierarchy Viewer來查看布局運行時的詳細情況;可以使用layoutopt(布局優(yōu)化)命令行工具來優(yōu)化你的布局文件。優(yōu)化布局非常重要,因為復雜的布局文件加載很慢。layoutopt工具簡單地掃描XML布局文件并找出不必要的控件。在Android開發(fā)者網站的layoutopt部分查看更多信息。