Android中有六大布局,分別是:
- LinearLayout(線性佈局)
- RelativeLayout(相對佈局)
- TableLayout(表格佈局)
- FrameLayout(幀佈局)
- AbsoluteLayout(絕對佈局)
- GridLayout(網格佈局)
今天我們要講解的就是第一個佈局,LinearLayout(線性佈局)
LinearLayout
LinearLayout又稱作線性佈局,是一種非常常用的佈局。
這個佈局會將它所包含的控件在線性方向上依次排列。
既然是線性排列,肯定就不僅只有一個方向,這裏一般只有兩個方向:水平方向和垂直方向。
屬性
LinearLayout(線性佈局)常用到的屬性簡單歸納一下:
屬性名 | 解釋 |
---|---|
android:orientation | 指定線性佈局的方向(水平或者垂直) |
android:width | 線性佈局的容器寬度 |
android:height | 線性佈局的容器高度 |
android:background | 線性佈局的背景 |
android:gravity | 線性佈局中,子容器相對於父容器所在的位置 |
android:layout_gravity | 容器相對它的父元素的對齊方式 |
android:layout_weight | 權重,按比例來分配控件佔用父控件的大小 |
android:divider | 分割線 |
android:showDivider | 分割線的位置 |
android:dividerPadding | 分割線的padding |
orientation
屬性值 | 解釋 |
---|---|
android:orientation="horizontal" | 指定線性佈局方向:水平 |
android:orientation="vertical" | 指定線性佈局方向:垂直 |
width
屬性值 | 解釋 |
---|---|
android:width="xxxdp" | 指定線性佈局的容器寬度爲:xxxdp |
android:width="wrap_content" | 指定線性佈局的容器寬度爲:根據容器內容寬度大小來填充屏幕寬度 |
android:width="match_parent" | 指定線性佈局的容器寬度爲:撐滿整個屏幕寬度 |
height
屬性值 | 解釋 |
---|---|
android:height="xxxdp" | 指定線性佈局的容器高度爲:xxxdp |
android:height="wrap_content" | 指定線性佈局的容器高度爲:根據容器內容高度大小來填充屏幕高度 |
android:height="match_parent" | 指定線性佈局的容器高度爲:撐滿整個屏幕高度 |
background
屬性值 | 解釋 |
---|---|
android:background="#000" | 指定線性佈局的背景爲:黑色(rgb顏色) |
android:background="@android:color/black" | 指定線性佈局的背景爲:黑色(引用android系統自帶的原始黑色) |
andrid:background="@color/colorPrimary" | 指定線性佈局的背景爲:(根據res/color.xml 中的colorPrimary所定義的顏色設置) |
gravity
自身是父容器
屬性值 | 解釋 |
---|---|
android:gravity="center" | 指定線性佈局中,子容器相對於父容器所在的位置爲:正中心 |
android:gravity="cente_verticalr" | 指定線性佈局中,子容器相對於父容器所在的位置爲:垂直方向的正中心 |
android:gravity="center_horizontal" | 指定線性佈局中,子容器相對於父容器所在的位置爲:水平方向的正中心 |
android:gravity="left" | 指定線性佈局中,子容器相對於父容器所在的位置爲:最左邊(默認) |
android:gravity="right" | 指定線性佈局中,子容器相對於父容器所在的位置爲:最右邊 |
android:gravity="top" | 指定線性佈局中,子容器相對於父容器所在的位置爲:最上方(默認) |
android:gravity="bottom" | 指定線性佈局中,子容器相對於父容器所在的位置爲:最下方 |
layout_gravity
自身是子容器
屬性值 | 解釋 |
---|---|
android:gravity="center" | 指定線性佈局中,子容器相對於父容器所在的位置爲:正中心 |
android:gravity="cente_verticalr" | 指定線性佈局中,子容器相對於父容器所在的位置爲:垂直方向的正中心 |
android:gravity="center_horizontal" | 指定線性佈局中,子容器相對於父容器所在的位置爲:水平方向的正中心 |
android:gravity="left" | 指定線性佈局中,子容器相對於父容器所在的位置爲:最左邊(默認) |
android:gravity="right" | 指定線性佈局中,子容器相對於父容器所在的位置爲:最右邊 |
android:gravity="top" | 指定線性佈局中,子容器相對於父容器所在的位置爲:最上方(默認) |
android:gravity="bottom" | 指定線性佈局中,子容器相對於父容器所在的位置爲:最下方 |
layout_weight
當我們給一個view設置了android:layout_weight屬性,意味着賦予它話語權,常規思維就是誰的weight大,誰說了算(空間佔比大)。
屬性值 | 解釋 |
---|---|
android:layout_weight="2" | 該單元權重爲2 |
divider
這個屬性可以在LinearLayout的每個子佈局直間添加一個“drawable”作爲分割線,這個drawable必須有設定好的高度或者寬度,因此不能直接設置爲“@color/….”
這個屬性要和android:showDividers一起使用纔會生效
android:showDividers有“begining”,“middle”,“end”,“none”四種值。默認值爲“none”,即不顯示分割線。
使用方式:
- 新建一個固有的width/height的Drawable:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<size
android:width="@dimen/spacing_medium"
android:height="@dimen/spacing_medium" />
<solid android:color="@android:color/transparent" />
</shape>
設置LinearLayout的android:divider="@drawable/spacer_medium",並設置android:showDividers
android:showDividers
屬性值 | 解釋 |
---|---|
android:showDividers=”beginning” | 只有第一個子控件上面有一條分割線 |
android:showDividers=”middle” | 每個子空間之間都有一條分割線 |
android:showDividers=”end” | 只有最後一個子控件有一條分割線 |