本文介绍 Android 界面开发中最基本的四种布局LinearLayout、RelativeLayout、FrameLayout、TableLayout 的使用方法及这四种布局中常用的属性。
- LinearLayout 线性布局,布局中空间呈线性排列
- RelativeLayout 相对布局,通过相对定位的方式,控制控件位置
- FrameLayout 帧布局,最简单的布局,所有控件放置左上角
- TableLayout 表格布局,以行列方式控制控件位置
四种布局示例
1.LinearLayout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
|
<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/4、3/4,此时元素宽度不由layout_width决定,设置为0dp是比较规范的写法。
layout_weight 若元素A设置为1,元素B不设置,将layout_width设置为具体的值或wrap_content,那么元素B的宽度由layout_width决定,元素A将占满屏幕剩下的空间。
2.RelativeLayout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
|
<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: 左(右)边界对齐
3.FrameLayout
所有元素都放置在布局的左上角
1
2
3
4
5
6
7
8
9
10
11
12
13
|
<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> |
4.TableLayout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
<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> |
1
2
3
4
5
6
|
<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的第二张图。
5.自定义布局
Android中,布局下可以放置控件,也可以放置子布局。如果子布局内容较为独立且经常使用,例如标题栏,或者布局比较复杂,这时候可以考虑使用自定义布局的形式导入。方法很简单。
新建一个布局文件,例如example.xml
在父布局中引入:
1
2
3
4
5
6
7
8
|
<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> |
以上就是Android最基本的四种布局的详细内容介绍,希望对大家的学习有所帮助。