|
在淺談Android五大布局(一)中已經(jīng)描述了LinearLayout(線性布局)、FrameLayout(單幀布局)和AbsoulteLayout(絕對布局)三種布局結構,剩下的兩種布局RelativeLayout(相對布局)和TableLayout(表格布局)相對之前布局結構稍顯復雜一點,所以這里另起篇幅進行介紹。
RelativeLayout:
RelativeLayout按照各子元素之間的位置關系完成布局。在此布局中的子元素里與位置相關的屬性將生效。例如android:layout_below, android:layout_above等。子元素就通過這些屬性和各自的ID配合指定位置關系。注意在指定位置關系時,引用的ID必須在引用之前,先被定義,否則將出現(xiàn)異常。
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五大布局結構中最靈活的一種布局結構,比較適合一些復雜界面的布局。下面示例就展示這么一個情況,第一個文本框與父組件的底部對齊,第二個文本框位于第一個文本框的上方,并且第三個文本框位于第二個文本框的左方。

1 <?xml version="1.0" encoding="utf-8"?> 2 <RelativeLayout xmlns:android="http://schemas./apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> 3 <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"/> 4 <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"/> 5 <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"/> 6 </RelativeLayout>
TableLayout:
TableLayout顧名思義,此布局為表格布局,適用于N行N列的布局格式。一個TableLayout由許多TableRow組成,一個TableRow就代表TableLayout中的一行。
TableRow是LinearLayout的子類,它的android:orientation屬性值恒為horizontal,并且它的android:layout_width和android:layout_height屬性值恒為MATCH_PARENT和WRAP_CONTENT。所以它的子元素都是橫向排列,并且寬高一致的。這樣的設計使得每個TableRow里的子元素都相當于表格中的單元格一樣。在TableRow中,單元格可以為空,但是不能跨列。
下面示例演示了一個TableLayout的布局結構,其中第二行只有兩個單元格,而其余行都是三個單元格。


1 <?xml version="1.0" encoding="utf-8"?> 2 <TableLayout xmlns:android="http://schemas./apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> 3 <TableRow android:layout_width="fill_parent" android:layout_height="wrap_content"> 4 <TextView android:background="#ffffffff" android:gravity="center" android:padding="10dp" android:text="1"/> 5 <TextView android:background="#ff654321" android:gravity="center" android:padding="10dp" android:text="2"/> 6 <TextView android:background="#fffedcba" android:gravity="center" android:padding="10dp" android:text="3"/> 7 </TableRow> 8 <TableRow android:layout_width="fill_parent" android:layout_height="wrap_content"> 9 <TextView android:background="#ff654321" android:gravity="center" android:padding="10dp" android:text="2"/> 10 <TextView android:background="#fffedcba" android:gravity="center" android:padding="10dp" android:text="3"/> 11 </TableRow> 12 <TableRow android:layout_width="fill_parent" android:layout_height="wrap_content"> 13 <TextView android:background="#fffedcba" android:gravity="center" android:padding="10dp" android:text="3"/> 14 <TextView android:background="#ff654321" android:gravity="center" android:padding="10dp" android:text="2"/> 15 <TextView android:background="#ffffffff" android:gravity="center" android:padding="10dp" android:text="1"/> 16 </TableRow> 17 </TableLayout>

|