1. 程式人生 > Android入門教學 >Android絕對佈局AbsoluteLayout

Android絕對佈局AbsoluteLayout

本節將介紹 Android 原生布局的最後一個佈局,也是最不常用的佈局——絕對佈局(AbsoluteLayout)。目前在 Android SDK 中處於被棄用的狀態,原因是前面學習過的 5 大布局太過強大。確實,絕對佈局在開發中中可能從來都用不到,但是我們作為學習過慕課教程的高階玩家,需要一方面擴充套件自己的知識面,另一方面需要學習絕對佈局的設計思想及設計理念,這對我們今後的學習都是有益無害的。

1. 絕對佈局的特性

顧名思義,絕對佈局就是可以設定佈局內 View 及 ViewGroup 所在的絕對位置。從名字上聽起來它和相對佈局(RelativeLayout)相反,所以這裡我們還是用相對佈局那一節(第8節)所提到的例子舉例。

如果你想佈置你的客廳,你可以將所有的傢俱都標上位置,比如空調在右上角、沙發靠下方牆面、茶几在中間靠下、電視機靠上方牆面等等。那麼客廳就是你的 AbsoluteLayout,空調、沙發、茶几、電視等就是 View,然後我們給每個 View 設定一個座標,這樣一來就可以按照我們的要求佈置客廳了。

AbsoluteLayout 的工作原理就是這麼簡單,如下圖所示,直接對他的子 View 設定 X / Y 座標,然後 Android 系統就會幫我們將各個 View 擺放到相應的位置。AbsoluteLayout 比較直觀,但是也非常不靈活,相容性差。現在 Android 系統的機型千奇百怪,難以通過一套座標系就能適配到各個不同尺寸的手機上,就好像如果直接把別人的客廳傢俱擺放座標照搬到自己家,很可能會擺出各種奇葩的設計,這也是 AbsoluteLayout 最大的一個缺陷。

AbsoluteLayout特性

2. 絕對佈局的屬性

AbsoluteLayout 的屬性非常簡單,從上面的瞭解你應該也能猜出一二:

  • android:id:
    唯一標識當前 View 的 id
  • android:layout_x:
    設定 View 的橫座標
  • android:layout_y:
    設定 View 的縱座標

需要注意的是,這裡所設定的橫縱座標均是 View 左上角的座標,不是中心點

3. AbsoluteLayout 例子

大家還記得第 10 節中,我們通過 GridLayout 實現了一個登陸頁面嗎?這一節我們用 AbsoluteLayout 來實現一個簡單的登陸頁面。

首先我們需要一個 TextView 作為“賬號”提示文案、一個 TextView 作為“密碼”提示文案,再加兩個 EditText 作為輸入框,然後還有一個確認按鍵。最後在新增之後我們對每個 View 設定一個座標即可,程式碼如下:

<AbsoluteLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_x="38dp"
        android:layout_y="38dp"
        android:text="賬號" />

    <EditText
        android:layout_width="200dp"
        android:layout_height="wrap_content"
        android:layout_x="131dp"
        android:layout_y="17dp"
        android:width="33dp" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_x="38dp"
        android:layout_y="66dp"
        android:text="密碼" />

    <EditText
        android:layout_width="200dp"
        android:layout_height="wrap_content"
        android:layout_x="131dp"
        android:layout_y="40dp"
        android:width="33dp" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_x="39dp"
        android:layout_y="109dp"
        android:text="確認" />
</AbsoluteLayout>

最後的執行效果:

AbsoluteLayout示例

也許在我的這個裝置上執行效果還行,你可以直接拷貝程式碼到自己的裝置或者虛擬機器上執行,會發現在不同尺寸的手機上效果差異會很大。極端情況如果你的螢幕更寬、或者乾脆就是一臺平板,那麼我們的內容會全部集中在左側,視覺效果就很差。

4. 小結

到這裡,首先要恭喜你已經學完了 Android 所有的原生布局,對於 AbsoluteLayout 我們只需要瞭解,在未來的開發中並不推薦使用。更多的時候是採用 LinearLayout + RelativeLayout 來組合出不同的效果,主要借用 LinearLayout 的 weight 屬性幫我們完成比例適配,然後 RelativeLayout 的相對位置可以讓我們的佈局更加靈活;

如果需要製作表格或者網格結果,那麼 TableLayout / GridLayout 是當之無愧最佳之選;最後幀佈局擁有強大的效能優勢,很適合作為一個複雜佈局的 root 佈局,在能夠使用的時候更推薦使用 FrameLayout。
Layout 的存在就是為了對 View 進行佈局擺放,那麼接下來的教程就開始進入 View 的講解。