Android Layout 佈局 (二)

Android RelativeLayout 佈局

RelativeLayout 又稱為相對佈局,與 LinearLayout 的不同就像它的名字一樣。它相對其他元件或者它本身的父元件來控制佈局。也是最靈活最常用的一種佈局。

Imgur

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
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/RelativeLayout1"
android:layout_width="match_parent"
android:layout_height="match_parent" >

<TextView
android:id="@+id/text1"
android:background="#FF0"
android:layout_width="80dp"
android:layout_height="80dp"
android:layout_centerInParent="true"
android:text="Center"
android:textAlignment="center"
android:gravity="center">

<TextView
android:id="@+id/img2"
android:background="#0F0"
android:layout_width="80dp"
android:layout_height="80dp"
android:layout_toLeftOf="@id/text1"
android:layout_centerVertical="true"
android:text="Left"
android:textAlignment="center"
android:gravity="center"/>

<TextView
android:id="@+id/img3"
android:background="#0FF"
android:layout_width="80dp"
android:layout_height="80dp"
android:layout_toRightOf="@id/text1"
android:layout_centerVertical="true"
android:text="Right"
android:textAlignment="center"
android:gravity="center"/>


<TextView
android:id="@+id/img4"
android:background="#0AA"
android:layout_width="80dp"
android:layout_height="80dp"
android:layout_above="@id/text1"
android:layout_centerHorizontal="true"
android:text="Top"
android:textAlignment="center"
android:gravity="center"/>

<TextView
android:id="@+id/img5"
android:background="#F0F"
android:layout_width="80dp"
android:layout_height="80dp"
android:layout_below="@id/text1"
android:layout_centerHorizontal="true"
android:text="Bottom"
android:textAlignment="center"
android:gravity="center"/>
</RelativeLayout>

常用屬性

第一類 - 根據父元件定位

參考上述範例的 Center TextView

  • android:layout_centerHrizontal : 水平置中
  • android:layout_centerVertical : 垂直置中
  • android:layout_centerInparent : 父元件的中心位置
  • android:layout_alignParentBottom : 對齊父元件底部
  • android:layout_alignParentLeft : 對齊父元件左側
  • android:layout_alignParentRight : 對齊父元件的右側
  • android:layout_alignParentTop : 對齊父元件頂部
  • android:layout_alignWithParentIfMissing : 如果相對應的其他元件找不到的話就以父元件做參考元件
第二類 - 根據同層元件定位

根據上述範例一樣,其他同層元件根據 Center TextView 去當作參考元件,根據 元件id 決定需要的參考元件。

  • android:layout_toLeftOf : 參考元件的左側
  • android:layout_toRightOf : 參考元件的右側
  • android:layout_above : 參考元件的上方
  • android:layout_below : 參考元件的下方
  • android:layout_alignTop : 對齊參考元件的上邊界
  • android:layout_alignBottom : 對齊參考元件的下邊界
  • android:layout_alignLeft : 對齊參考元件的左邊界
  • android:layout_alignRight : 對齊參考元件的右邊界

margin 與 padding 的差異

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
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">

<Button
android:id="@+id/btn1"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:text="Button"/>
<Button
android:paddingLeft="100dp"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:text="Button"
android:layout_toRightOf="@id/btn1"/>

<Button
android:id="@+id/btn2"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:text="Button"
android:layout_alignParentBottom="true"/>
<Button
android:layout_marginLeft="100dp"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:text="Button"
android:layout_toRightOf="@id/btn2"
android:layout_alignParentBottom="true"/>
</RelativeLayout>

Imgur

margin 代表的是偏移,例如 marginleft="10dp" 代表元件離左側偏移 10dp 。而 padding 代表的是填充,而填充的對象針對的是元件中的元素,比如 TextView 中的文字。 margin 針對的是容器中的元件,而 padding 針對的是元件中的元素。

margin 可設定為負數