前言
前幾篇文章複習總結了Android的四大元件,現在開始複習Android中常用的佈局包括以下幾種,先從LinearLayout開始說起
- LinearLayout
- RelativeLayout
- FrameLayout
- TableLayout
- AbsoluteLayout
- ContraintLayout
一、LinearLayout(線性佈局)
LinearLayout是一種將其子View水平單列或者垂直單行進行排列的佈局
線性佈局有以下三個重要的屬性
android:orientation
取值為vertical或者horizontal,分別表示垂直佈局和水平佈局android:layout_weight
權重,應用場景主要有需要按比例分配空間或者填充剩餘空間android:layout_gravity
重心,當orientation為vertical時left和right生效,為horizontal時top和bottom生效android:divider
分割線圖片,需要配合下面那個屬性android:showDividers
顯示分割線的位置四選一,none、begin、end、middle
假設需要實現把一個EditText和Bottom放置於一行並且EditText填充除了Button以外的所有區域,我們可以使用以下程式碼實現
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<EditText
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="send"/>
</LinearLayout>
複製程式碼
二、RelativeLayout(相對佈局)
RelativeLayout是一種子View能夠描述與其它子View或者父View之間相對關係的佈局
相對佈局有以下幾個重要的屬性
android:layout_alignTop
與指定View的頂部對齊android:layout_alignBottom
與指定View的底部對齊android:layout_alignLeft
與指定View的左邊對齊android:layout_alignRight
與指定View的右邊對齊android:layout_alignParentTop
與父View的頂部對齊android:layout_alignParentBottom
與父View的底部對齊android:layout_alignParentLeft
與父View的左邊對齊android:layout_alignParentRight
與父View的頂部對齊android:layout_toLeftOf
當前View的Right與指定View的左邊對齊android:layout_toRightOf
當前View的Left與指定View的右邊對齊android:layout_above
當前View的Bottom與指定View的上面對齊android:layout_alignBaseLine
當前View的文字底部與指定View的文字底部對齊android:layout_centerHorizontal
是否水平居中android:layout_centerVertical
是否垂直居中android:layout_centerInParent
是否水平垂直居中於父View
這裡以列表中的一個Item為例左邊是一張圖片,右邊上面是一個Title,下面是subTitle
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<ImageView
android:id="@+id/iv"
android:layout_width="50dp"
android:layout_height="50dp"
android:layout_margin="10dp"
android:background="@mipmap/ic_launcher"
android:layout_alignParentLeft="true"/>
<TextView
android:id="@+id/tv_title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_toRightOf="@id/iv"
android:layout_alignTop="@id/iv"
android:text="我是標題"/>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_above=""
android:layout_toRightOf="@id/iv"
android:layout_below="@+id/tv_title"
android:text="我是子標題"/>
</RelativeLayout>
複製程式碼
三、FrameLayout(幀佈局)
FrameLayout是一種將每個子View當做一幀,層疊顯示的View
該佈局沒有比較特別的屬性,就只是一層層的疊加
四、TableLayout(表格佈局)
TableLayout繼承與LinearLayout,將其子View橫向或者豎向排列,一般子View是TableRow
表格佈局有以下幾個重要的屬性
android:collapseColumns
隱藏那幾列,比如0,2表示隱藏第1、3兩列android:stretchColumns
設定哪些列可以被拉伸,如果水平方向還有空餘的空間則拉伸這些列android:shrinkColumns
設定哪些列可以收縮,當水平方向空間不夠時會進行收縮
五、AbsoluteLayout(絕對佈局)
AbsoluteLayout由於無法適配螢幕在API3已經被標為過時了
六、ContraintLayout(約束佈局)
ContraintLayout是一種允許您以靈活的方式定位和調整小部件的佈局
使用該佈局能夠顯著的解決佈局巢狀過多的問題。
- 通過視覺化佈局參考這篇文章blog.csdn.net/guolin_blog…
- 通過程式碼佈局參考這篇文章www.jianshu.com/p/17ec9bd6c…