- LinearLayout 線性布局
- RelativeLayout 相對布局
- FrameLayout 幀布局
- AbsoluteLayout絕對布局
- TableLayout 表格布局
- GridLayout 網格布局
- ConstraintLayout 約束布局
- 幾點布局原則
1.LinearLayout線性布局
線性布局是指子控件以水平或垂直方式排列。
決定子控件的排布方向的屬性就是android:orientation,它有兩個選項,vertical表示垂直排列,horizontal表示水平排列,注意這個屬性是在這整個LinearLayout標簽之下的,是全局屬性。
2.RelativeLayout相對布局
相對布局是子控件以控件之間的相對位置或子類控件相對於父容器的位置排列。所以每個子控件可以通過兩種參考系來決定自己的位置。
一種是相對於父容器,相關的屬性有:
android:layout_alignParentBottom(在父容器最下,true或false)、
android:layout_alignParentTop(在父容器最上) 、
android:layout_alignParentLeft(在父容器最左) 、
android:layout_alignParentRight(在父容器最右)、
android:layout_marginTop(和父容器上端的距離,單位dp)、
android:layout_marginBottom(和父容器下端的距離)、
android:layout_marginLeft(和父容器左端的距離)、
android:layout_marginRight(和父容器右端的距離)、
android:layout_margin(和父容器四周的距離)、
android:layout_centerVertical(在父類的垂直居中,true或false)、
android:layout_centerHorizontal(在父類的水平居中)、
android:layout_centerInParent(在父類的水平垂直居中)。
一種是相對於其他控件,相關的屬性有:
android:layout_below(位於某控件下方,以id標記)、
android:layout_above(位於某控件上方)、
android:layout_toLeftOf(位於某控件左方)、
android:layout_toRightOf(位於某控件右方)、
android:layout_alignBottom(與某控件底部對齊,以id標記)、
android:layout_alignTop(與某控件頂部對齊) 、
android:layout_alignLeft(與某控件左邊緣對齊) 、
android:layout_alignRight(與某控件右邊緣對齊)、
android:layout_alignBaseline(與某控件的文本內容在一條直線上)
3.FrameLayout幀布局
幀布局是所有子控件均放在左上角且后面元素直接覆蓋在前面元素之上。兩個常用屬性:android:foreground(設置改幀布局容器的前景圖像,前景圖像是永遠處於幀布局最上面的圖像,就是不會被覆蓋的圖片)
android:foregroundGravity(設置前景圖像顯示的位置)。為更直觀,下圖里展示的TextView都填充了顏色,可以看出textView4在最上面。
4.AbsoluteLayout絕對布局
絕對布局是子控件通過它x,y位置來決定其位置。即android:layout_x和android:layout_y屬性。但是絕對布局不常見,用x和y決定的控件在不同大小的適配屏幕上的位置直觀上會變化,在一個屏幕上的右下角並不代表在另一個屏幕上也是右下角,適應能力差,所以AS也告訴我們不建議使用。
5.TableLayout表格布局
表格布局是以行列的形式管理子控件,每一行是一個TableRow對象或者View對象。
6.GridLayout網格布局
網格布局是在Android 4.0以后引入的一個新的布局,和表格布局有點類似,但比表格布局功能更強大一些。
7.ConstraintLayout 約束布局
AS2.2之后新增的約束布局,和之前出現的集中布局不同的是,它非常適合使用可視化的方式來編寫界面,但並不太適合使用XML的方式來進行編寫。
8.布局原則:
(1)盡量多使用線性布局和相對布局,不用絕對布局。
(2)在布局層次一樣下,線性布局比相對布局的性能要高。
(3)使用include標簽增加UI的復用效率:可把重復使用的控件抽取出來放在一個xml文件里,並在需要它的xml文件里通過include標簽引用。這樣做也保證了UI布局的規整和易維護性。
(4)使用ViewStub標簽減少布局的嵌套層次,它和include一樣可以用來引入一個外部布局,但不同的是,ViewStub引入的布局不占用位置,在解析layout布局是節省了CPU和內存。可用inflate方法使之在布局中顯示出來。
(5)使用merge標簽降低UI布局的嵌套層次:適用於布局根節點是FrameLayout且不設置background和padding等額外屬性;當某個布局作為子布局被其他布局include的時候可用merge當作該布局的頂節點。
https://www.jianshu.com/p/68e086bf43d8
作者寫得好啊,要多學習