在淺談Android五大布局(一)中已經描述了LinearLayout(線性佈局)、FrameLayout(單幀佈局)和AbsoulteLayout(絕對佈局)三種佈局結構,剩下的兩種佈局RelativeLayout(相對佈局)和TableLayout(表格佈局)相對以前佈局結構稍顯複雜一點,因此這裏另起篇幅進行介紹。android
RelativeLayout:佈局
RelativeLayout按照各子元素之間的位置關係完成佈局。在此佈局中的子元素裏與位置相關的屬性將生效。例如android:layout_below, android:layout_above等。子元素就經過這些屬性和各自的ID配合指定位置關係。注意在指定位置關係時,引用的ID必須在引用以前,先被定義,不然將出現異常。spa
RelativeLayout裏經常使用的位置屬性以下:
android:layout_toLeftOf —— 該組件位於引用組件的左方
android:layout_toRightOf —— 該組件位於引用組件的右方
android:layout_above —— 該組件位於引用組件的上方
android:layout_below —— 該組件位於引用組件的下方
android:layout_alignParentLeft —— 該組件是否對齊父組件的左端
android:layout_alignParentRight —— 該組件是否齊其父組件的右端
android:layout_alignParentTop —— 該組件是否對齊父組件的頂部
android:layout_alignParentBottom —— 該組件是否對齊父組件的底部
android:layout_centerInParent —— 該組件是否相對於父組件居中
android:layout_centerHorizontal —— 該組件是否橫向居中
android:layout_centerVertical —— 該組件是否垂直居中設計
RelativeLayout是Android五大布局結構中最靈活的一種佈局結構,比較適合一些複雜界面的佈局。下面示例就展現這麼一個狀況,第一個文本框與父組件的底部對齊,第二個文本框位於第一個文本框的上方,而且第三個文本框位於第二個文本框的左方。code
RelativeLayout <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> <TextView android:id="@+id/text_01" android:layout_width="50dp" android:layout_height="50dp" android:background="#ffffffff" android:gravity="center" android:layout_alignParentBottom="true" android:text="1"/> <TextView android:id="@+id/text_02" android:layout_width="50dp" android:layout_height="50dp" android:background="#ff654321" android:gravity="center" android:layout_above="@id/text_01" android:layout_centerHorizontal="true" android:text="2"/> <TextView android:id="@+id/text_03" android:layout_width="50dp" android:layout_height="50dp" android:background="#fffedcba" android:gravity="center" android:layout_toLeftOf="@id/text_02" android:layout_above="@id/text_01" android:text="3"/> </RelativeLayout>
TableLayout:xml
TableLayout顧名思義,此佈局爲表格佈局,適用於N行N列的佈局格式。一個TableLayout由許多TableRow組成,一個TableRow就表明TableLayout中的一行。utf-8
TableRow是LinearLayout的子類,它的android:orientation屬性值恆爲horizontal,而且它的android:layout_width和android:layout_height屬性值恆爲MATCH_PARENT和WRAP_CONTENT。因此它的子元素都是橫向排列,而且寬高一致的。這樣的設計使得每一個TableRow裏的子元素都至關於表格中的單元格同樣。在TableRow中,單元格能夠爲空,可是不能跨列。it
下面示例演示了一個TableLayout的佈局結構,其中第二行只有兩個單元格,而其他行都是三個單元格。io
TableLayout <?xml version="1.0" encoding="utf-8"?> <TableLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> <TableRow android:layout_width="fill_parent" android:layout_height="wrap_content"> <TextView android:background="#ffffffff" android:gravity="center" android:padding="10dp" android:text="1"/> <TextView android:background="#ff654321" android:gravity="center" android:padding="10dp" android:text="2"/> <TextView android:background="#fffedcba" android:gravity="center" android:padding="10dp" android:text="3"/> </TableRow> <TableRow android:layout_width="fill_parent" android:layout_height="wrap_content"> <TextView android:background="#ff654321" android:gravity="center" android:padding="10dp" android:text="2"/> <TextView android:background="#fffedcba" android:gravity="center" android:padding="10dp" android:text="3"/> </TableRow> <TableRow android:layout_width="fill_parent" android:layout_height="wrap_content"> <TextView android:background="#fffedcba" android:gravity="center" android:padding="10dp" android:text="3"/> <TextView android:background="#ff654321" android:gravity="center" android:padding="10dp" android:text="2"/> <TextView android:background="#ffffffff" android:gravity="center" android:padding="10dp" android:text="1"/> </TableRow> </TableLayout>