線性布局是Android UI頁面開發(fā)常用的布局比规,LinearLayout is a view group that aligns all children in a single direction, vertically or horizontally. 根據(jù)官網(wǎng)的描述可以解釋為:LinearLayout是一個視圖組,它將所有子項在一個方向上灾常,垂直或水平對齊。
編寫xml布局
Android中的頁面布局使用xml文檔描述雕什,xml是一種類似HTML的標(biāo)簽語言壹士,可以用來標(biāo)記數(shù)據(jù)倦春、定義數(shù)據(jù)類型,可以允許用戶對自己標(biāo)記語言進(jìn)行定義。我們打開Android Studio創(chuàng)建一個Android項目抄瑟,默認(rèn)會創(chuàng)建一個MainActivity
頁面皮假,同時生成一個布局文件activity_main.xml
,文件的路徑如下圖所示。
默認(rèn)創(chuàng)建的activity_main.xml
使用的主布局是ConstraintLayout約束布局,我們可以把約束布局刪除乖杠,也可以在約束布局中嵌套線性布局畏吓。如果刪除約束布局庵佣,請保留xml文件的第一行。下面我們嘗試編寫一下xml文件:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
</LinearLayout>
編輯xml布局文件需要帶上android命名空間xmlns:android="http://schemas.android.com/apk/res/android"
肛根,否則會因無法識別而報錯臼氨。layout_width
和layout_height
為必須屬性,分別表示布局的寬和高持隧,屬性名前面帶上android前綴。orientation
屬性表示子項排列方向呀狼,也建議帶上該屬性,默認(rèn)值為horizontal橫向排列她奥。
上圖右邊為LinearLayout線性布局效果拳恋,啥也沒有隙赁,因為我們啥也沒寫...
線性布局方向和尺寸
上面簡單提及了一下線性布局的layout_width
, layout_height
, orientation
屬性,分別表示布局的寬弟灼、高和排列方向田绑。寬和高屬性的值可以為match_parent
, wrap_content
, 和固定數(shù)值尺寸
。Android中推薦的長度尺寸單位是 dp,它表示像素密度
缴挖,與像素單位 px的區(qū)別是可以根據(jù)分辨率調(diào)整展示苟鸯,減少跨設(shè)備顯示差異早处。
orientation
屬性有兩個值:horizontal和vertical咸包,分別表示橫向和縱向排列子項。下面為LinearLayout添加兩個TextView作為子項,展示horizontal和vertical的差異葛账。
Vertical:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<TextView
android:text="this is TextView1"
android:textColor="@color/black"
android:textSize="18sp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<TextView
android:text="this is TextView1"
android:textColor="@color/black"
android:textSize="18sp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</LinearLayout>
Horizontal:代碼部分僅僅把vertical改為了horizontal
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal">
<TextView
android:text="this is TextView1"
android:textColor="@color/black"
android:textSize="18sp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<TextView
android:text="this is TextView1"
android:textColor="@color/black"
android:textSize="18sp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</LinearLayout>
線性布局子項權(quán)重
子項可以通過設(shè)置layout_weight屬性來設(shè)置自身寬高占容器布局的比例宣谈,如果每個子項要平均分配漩怎,將layout_weight屬性值設(shè)置為1即可叁执,同時需要將layout_width寬度設(shè)置為0dp(對于橫向排列來說)吆录。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal">
<TextView
android:text="this is TextView1"
android:textColor="@color/black"
android:textSize="18sp"
android:layout_weight="2"
android:background="@color/teal_200"
android:layout_width="0dp"
android:layout_height="wrap_content"/>
<TextView
android:text="this is TextView2"
android:textColor="@color/black"
android:textSize="18sp"
android:layout_weight="1"
android:background="@color/purple_200"
android:layout_width="0dp"
android:layout_height="wrap_content"/>
</LinearLayout>
線性布局的嵌套
線性布局可以嵌套線性布局抱究,也可以嵌套其它布局。下面示例使用線性布局加權(quán)重實現(xiàn)底部帶圖片的導(dǎo)航欄樣式:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="bottom"
android:orientation="horizontal">
<LinearLayout
android:layout_weight="1"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:orientation="vertical">
<ImageView
android:src="@mipmap/ic_launcher"
android:layout_width="40dp"
android:layout_height="40dp"
android:layout_gravity="center"/>
<TextView
android:text="第一項"
android:textColor="@color/black"
android:textSize="18sp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"/>
</LinearLayout>
<LinearLayout
android:layout_weight="1"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:orientation="vertical">
<ImageView
android:src="@mipmap/ic_launcher"
android:layout_width="40dp"
android:layout_height="40dp"
android:layout_gravity="center"/>
<TextView
android:text="第二項"
android:textColor="@color/black"
android:textSize="18sp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"/>
</LinearLayout>
<LinearLayout
android:layout_weight="1"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:orientation="vertical">
<ImageView
android:src="@mipmap/ic_launcher"
android:layout_width="40dp"
android:layout_height="40dp"
android:layout_gravity="center"/>
<TextView
android:text="第三項"
android:textColor="@color/black"
android:textSize="18sp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"/>
</LinearLayout>
<LinearLayout
android:layout_weight="1"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:orientation="vertical">
<ImageView
android:src="@mipmap/ic_launcher"
android:layout_width="40dp"
android:layout_height="40dp"
android:layout_gravity="center"/>
<TextView
android:text="第四項"
android:textColor="@color/black"
android:textSize="18sp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"/>
</LinearLayout>
</LinearLayout>
效果預(yù)覽:
上面的示例看著代碼比較多,其實每個子項都是一個LinearLayout包裹著一個圖片框和一個文本框,重復(fù)渲染了四遍,每個子項LinearLayout平均分配外層布局的寬度。
其它常用屬性
除了以上的layout_width
, layout_height
, orientation
, layout_weight
屬性,還經(jīng)常用到下列屬性:
屬性 | 描述 |
---|---|
android:id |
為控件指定相應(yīng)的ID |
android:padding |
指定控件的內(nèi)邊距,控件當(dāng)中的內(nèi)容 |
android:layout_margin |
視圖與周圍視圖的距離(外邊距) |
android:minWidth |
視圖最小寬度 |
android:minHeight |
視圖最小高度 |
android:background |
視圖的背景: 可以是顏色氯窍,也可以是圖片 |
android:visible |
視圖的可視屬性 |
android:layout_gravity |
視圖與上級視圖的對齊方式 |
android:gravity |
視圖中內(nèi)容與視圖的對齊方式 |
android:layout_centerHrizontal |
水平居中 |
android:layout_centerVertical |
垂直居中 |