淺談Android五大布局(二)——RelativeLayout和TableLayout

 

 在淺談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>
相關文章
相關標籤/搜索