一、簡介
如下圖所示,按照界面編寫的方式,可以分為傳統布局和新型布局兩種。
1.線性布局:是平常練習demo時最常用的布局,分為水平、垂直方向兩種線性布局,即設置其屬性orientation:"vertical或horizontal"?!咀ⅲ涸诓恢付ǚ较驎r,默認為horizontal,即水平方向】
2.相對布局:依據某一控件的位置,來確定另一控件的位置,即另一控件相對于當前控件的位置。
3.表格布局:適用于多行多列的布局方式,通過表格方式來布局控件的位置,并且每個TableLayout由多個TableRow(表示行)組成。
4.網格布局:是在Android4.0之后引入的一個新布局,和上面的TableLayout有點類似,但GridLayout比TableLayout更加好用、靈活。
5.幀布局:放入的所有控件都會被依次放在左上區域,因此下一個控件會重疊覆蓋上一個控件,且無法為控件指定一個確切的位置。一般用于瀏覽單張圖片。
6.絕對布局:這個布局一般不會使用。屏幕的左上角為原點(0,0),橫軸為x軸且向右為遞增,縱軸為y軸且向下為遞增,依據layout_x及layout_y屬性分別設置控件的X及Y坐標。
7.約束布局:先說一下約束布局相對于傳統布局的優勢:①采用可視化的界面,拖拽控件即可完成界面的布局;②解決布局嵌套過多的問題,采用約束的方式來指定各個控件的位置和關系的,它有點類似于RelativeLayout,但遠比RelativeLayout要更強大。
二、常用屬性
2.1 所有布局的公有屬性
2.2 各個布局的特有屬性
- 線性布局
- 在不指定線性布局方向的情況下,默認采用水平布局。
- 為了完全按比例分配剩余空間,我們一般將控件的layout_width或layout_height設置為0dp,然后分別設置其權重值?!具@里僅考慮常用的,至于寬設置為wrap_content或match_parent請自行嘗試即可】
例:水平方向上有3個TextView,設置權重為1:1:1,則代碼如下:
運行結果如下:
將權重比例改為1:2:3,運行結果如下。
- 相對布局
- 表格布局
例:xml布局代碼如下:
運行結果如下:
由上面的演示可以看出:
- 如果直接在TableLayout中添加控件,則該控件將占滿一行,如第一行的文本框獨占一行。
- 若要在一行上放置多個控件,則需要在控件的外層添加一個TableRow容器,如第2、3、4、5行放置了不同個數的的按鈕。
- TableRow容器中控件的個數決定了該行有多少列(如圖分別有1,3,2,1,2列),而TableLayout的列數由控件最多的TableRow決定(整個布局有3列)。
- TableLayout的列的寬度由該列中最寬的單元格決定,如Button44444按鈕決定了第二列的寬度。
- 設置layout_column屬性,這里是跳過第1列,從第2列開始放置控件。
- 設置layout_span屬性,這里是合并3個單元格,即該按鈕占3個單元格。
請依次添加添加以下布局屬性:
① 收縮1、2列:
android:shrinkColumns="0,1"
運行結果如下:顯示不完全的button8顯示完全了,并且Button1、Button44444、Button6按鈕有收縮
②隱藏第1列:
android:collapseColumns="0"
運行結果如下:由于第4行僅有一個按鈕,則整個第四行隱藏。
③ 伸展第3列:
android:stretchColumns="2"
運行結果如下:由于僅有第2、3行有第三列,并且Button3與B5有拉伸。
- 網格布局
GridLayout相關屬性如下:
- 幀布局
- 幀布局是這幾種布局中最簡單的布局,添加到其中的控件默認會放到布局區域的左上角;
- 幀布局沒有任何的定位方式,后一個控件會覆蓋前一個控件;
- 幀布局的大小有控件中最大的控件決定;
注:設置前景圖像的位置可以兩個屬性疊加,例如右下角:bottom|right。
- 絕對布局
絕對布局很少使用,一般有兩個常用控件屬性:
- 約束布局
約束布局是google推薦的一種布局,有關于其拖拽控件、添加約束、借助Inspector設置屬性、Gidelines的使用以及自動添加約束的功能
最后
如果你看到了這里,覺得文章寫得不錯就給個贊唄!歡迎大家評論討論!如果你覺得那里值得改進的,請給我留言。一定會認真查詢,修正不足,定期免費分享技術干貨。感興趣的小伙伴可以點一下關注哦。謝謝!