博客逐步遷移至 極客兔兔的小站html
本文介紹 Android 界面開發中最基本的四種佈局LinearLayout、RelativeLayout、FrameLayout、TableLayout 的使用方法及這四種佈局中經常使用的屬性。android
- LinearLayout
線性佈局
,佈局中空間呈線性排列- RelativeLayout
相對佈局
,經過相對定位的方式,控制控件位置- FrameLayout
幀佈局
,最簡單的佈局,全部控件放置左上角- TableLayout
表格佈局
,以行列方式控制控件位置
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="150dp" android:orientation="vertical"> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="垂直1" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="垂直2" /> </LinearLayout> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="100dp" android:orientation="horizontal"> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="水平1" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="水平2" /> </LinearLayout> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="150dp" android:orientation="horizontal"> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="top" android:text="水平上對齊" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_vertical" android:text="水平垂直居中" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="bottom" android:text="水平下對齊" /> </LinearLayout> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="100dp" android:orientation="horizontal"> <EditText android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="3" android:hint="請輸入..."/> <Button android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="2" android:text="提交" /> </LinearLayout> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="100dp" android:orientation="horizontal"> <EditText android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:hint="請輸入..."/> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="提交" /> </LinearLayout> </LinearLayout>
- orientation:horizontal(水平)/vertical(垂直),表示線性排列的方向。
- layout_width/layout_height:元素的寬度與高度
- layout_gravity:top/bottom/center/left/right/etc,表示當前元素相對父元素的對齊方式,多種對齊方式用「|」隔開,右上對齊:
top|right
。- layout_weight:佔據空間的比例,例如元素A和B,A設置爲1,B設置爲3, 元素A、B分別佔空間的1/四、3/4,此時元素寬度不禁layout_width決定,設置爲
0dp
是比較規範的寫法。- layout_weight 若元素A設置爲1,元素B不設置,將layout_width設置爲具體的值或wrap_content,那麼元素B的寬度由layout_width決定,元素A將佔滿屏幕剩下的空間。
<LinearLayout ...> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="300dp"> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_alignParentBottom="true" android:text="我在左下"/> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerInParent="true" android:text="我在中間"/> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:layout_alignParentTop="true" android:text="我在右上"/> </RelativeLayout> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="300dp"> <Button android:id="@+id/button_2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerInParent="true" android:text="參照按鈕"/> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_above="@id/button_2" android:layout_toRightOf="@id/button_2" android:text="我在右上"/> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@id/button_2" android:layout_toLeftOf="@id/button_2" android:text="我在左下"/> </RelativeLayout> </LinearLayout>
如下屬性值爲true/false
- layout_centerHorizontal/layout_centerVertical: 水平居中、垂直居中
- layout_centerInparent: 相對父元素垂直&水平居中
- layout_alignParentBottom: 元素下邊界和父元素下邊界對齊
- layout_alignParentLeft: 左邊界對齊
- layout_alignParentRight: 右邊界對齊
- layout_alignParentTop: 上邊界對齊
如下屬性值爲控件id
- layout_above/layout_below: 在某元素的上方/下方
- layout_toLeftOf/layout_toRightOf: 在某元素的左方/右方
- layout_alignTop/layout_alignBottom: 元素上(下)邊界與某元素上(下)邊界對齊
- layout_alignLeft/layout_alignRight: 左(右)邊界對齊
全部元素都放置在佈局的左上角佈局
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="我是一個按鈕"/> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="我是一個輸入框"/> </FrameLayout>
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <TableRow> <TextView android:layout_height="wrap_content" android:text="郵箱"/> <EditText android:layout_height="wrap_content" android:inputType="textEmailAddress" android:hint="請輸入您的郵箱" /> </TableRow> <TableRow> <TextView android:layout_height="wrap_content" android:text="密碼"/> <EditText android:layout_height="wrap_content" android:inputType="textPassword" android:hint="請輸入密碼" /> </TableRow> <TableRow> <Button android:layout_height="wrap_content" android:layout_span="2" android:text="註冊" /> </TableRow> </TableLayout>
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:stretchColumns="1"> ... </TableLayout>
- TableRow: 表明表格佈局的一行,行內一個元素表明一列。
- layout_span: 合併單元格,設置爲2,表明該元素佔據2列空間。
- stretchColumns: TableRow中沒法指定空間寬度,那麼須要用到該屬性,設置爲1,表示拉伸第2列(0爲第1列)與屏幕同樣寬,效果如TableLayout的第二張圖。
Android中,佈局下能夠放置控件,也能夠放置子佈局。若是子佈局內容較爲獨立且常用,例如標題欄,或者佈局比較複雜,這時候能夠考慮使用自定義佈局的形式導入。方法很簡單。spa
example.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <include layout="@layout/example"/> </LinearLayout>