絕對布局 AbsoluteLayout
本節(jié)將介紹 Android 原生布局的最后一個布局,也是最不常用的布局——絕對布局(AbsoluteLayout)。目前在 Android SDK 中處于被棄用的狀態(tài),原因是前面學習過的 5 大布局太過強大。確實,絕對布局在開發(fā)中中可能從來都用不到,但是我們作為學習過慕課教程的高級玩家,需要一方面擴展自己的知識面,另一方面需要學習絕對布局的設計思想及設計理念,這對我們今后的學習都是有益無害的。
1. 絕對布局的特性
顧名思義,絕對布局就是可以設置布局內(nèi) View 及 ViewGroup 所在的絕對位置。從名字上聽起來它和相對布局(RelativeLayout)相反,所以這里我們還是用相對布局那一節(jié)(第8節(jié))所提到的例子舉例。
如果你想布置你的客廳,你可以將所有的家具都標上位置,比如空調(diào)在右上角、沙發(fā)靠下方墻面、茶幾在中間靠下、電視機靠上方墻面等等。那么客廳就是你的 AbsoluteLayout,空調(diào)、沙發(fā)、茶幾、電視等就是 View,然后我們給每個 View 設置一個坐標,這樣一來就可以按照我們的要求布置客廳了。
AbsoluteLayout 的工作原理就是這么簡單,如下圖所示,直接對他的子 View 設置 X / Y 坐標,然后 Android 系統(tǒng)就會幫我們將各個 View 擺放到相應的位置。AbsoluteLayout 比較直觀,但是也非常不靈活,兼容性差。現(xiàn)在 Android 系統(tǒng)的機型千奇百怪,難以通過一套坐標系就能適配到各個不同尺寸的手機上,就好像如果直接把別人的客廳家具擺放坐標照搬到自己家,很可能會擺出各種奇葩的設計,這也是 AbsoluteLayout 最大的一個缺陷。
2. 絕對布局的屬性
AbsoluteLayout 的屬性非常簡單,從上面的了解你應該也能猜出一二:
- android:id:
唯一標識當前 View 的 id - android:layout_x:
設置 View 的橫坐標 - android:layout_y:
設置 View 的縱坐標
需要注意的是,這里所設置的橫縱坐標均是 View 左上角的坐標,不是中心點
3. AbsoluteLayout 例子
大家還記得第 10 節(jié)中,我們通過 GridLayout 實現(xiàn)了一個登陸頁面嗎?這一節(jié)我們用 AbsoluteLayout 來實現(xiàn)一個簡單的登陸頁面。
首先我們需要一個 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>
最后的運行效果:
也許在我的這個設備上運行效果還行,你可以直接拷貝代碼到自己的設備或者虛擬機上運行,會發(fā)現(xiàn)在不同尺寸的手機上效果差異會很大。極端情況如果你的屏幕更寬、或者干脆就是一臺平板,那么我們的內(nèi)容會全部集中在左側(cè),視覺效果就很差。
4. 小結(jié)
到這里,首先要恭喜你已經(jīng)學完了 Android 所有的原生布局,對于 AbsoluteLayout 我們只需要了解,在未來的開發(fā)中并不推薦使用。更多的時候是采用 LinearLayout + RelativeLayout 來組合出不同的效果,主要借用 LinearLayout 的 weight 屬性幫我們完成比例適配,然后 RelativeLayout 的相對位置可以讓我們的布局更加靈活;
如果需要制作表格或者網(wǎng)格結(jié)果,那么 TableLayout / GridLayout 是當之無愧最佳之選;最后幀布局擁有強大的性能優(yōu)勢,很適合作為一個復雜布局的 root 布局,在能夠使用的時候更推薦使用 FrameLayout。
Layout 的存在就是為了對 View 進行布局擺放,那么接下來的教程就開始進入 View 的講解。