相對佈局由其名稱大致可以猜測其是相對於其他的控制項進行佈局的。因此呢!其屬性也就比較多了,不過基本上都是有跡可循的。下麵就其屬性值的特點可以將一些常用的屬性分為以下三個類別。 1. 屬性值為true或false(相對於父控制項的位置) android:layout_centerHrizontal 水平居 ...
相對佈局由其名稱大致可以猜測其是相對於其他的控制項進行佈局的。因此呢!其屬性也就比較多了,不過基本上都是有跡可循的。下麵就其屬性值的特點可以將一些常用的屬性分為以下三個類別。
1. 屬性值為true或false(相對於父控制項的位置)
android:layout_centerHrizontal |
水平居中 |
android:layout_centerVertical |
垂直居中 |
android:layout_centerInparent |
相對於父元素完全居中 |
android:layout_alignParentBottom |
貼緊父元素的下邊緣 |
android:layout_alignParentLeft |
貼緊父元素的左邊緣 |
android:layout_alignParentRight |
貼緊父元素的右邊緣 |
android:layout_alignParentTop |
貼緊父元素的上邊緣 |
android:layout_alignWithParentIfMissing |
如果對應的兄弟元素找不到的話就以父元素做參照物 |
2. 屬性值必須為id的引用名"@id/id_name"
android:layout_below |
在某元素的下方 |
android:layout_above |
在某元素的的上方 |
android:layout_toLeftOf |
在某元素的左邊 |
android:layout_toRightOf |
在某元素的右邊 |
android:layout_alignTop |
本元素的上邊緣和某元素的上邊緣對齊 |
android:layout_alignLeft |
本元素的左邊緣和某元素的左邊緣對齊 |
android:layout_alignBottom |
本元素的下邊緣和某元素的下邊緣對齊 |
android:layout_alignRight |
本元素的右邊緣和某元素的右邊緣對齊 |
3. 屬性值為具體的像素值
android:layout_marginBottom |
本元素底邊緣離某元素的距離 |
android:layout_marginLeft |
本元素左邊緣離某元素的距離 |
android:layout_marginRight |
本元素右邊緣離某元素的距離 |
android:layout_marginTop |
本元素上邊緣離某元素的距離 |
當然,除了這些個屬性,像之前在LinearLayout中用到的android:background、android:gravity與android:layout_gravity等等屬性該佈局也都有用到。同樣的,還是通過代碼來加深對一些屬性的認識
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/relativeLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#acdefb">
<Button
android:id="@+id/tv0"
android:layout_width="80dp"
android:layout_height="wrap_content"
android:background="#FF0000"
android:layout_centerInParent="true"
android:textSize="24sp"
android:maxLines="2"
android:text="中間相對組件"/>
<Button
android:id="@+id/tv1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="#012345"
android:layout_above="@+id/tv0"
android:layout_toLeftOf="@+id/tv0"
android:layout_alignParentLeft="true"
android:layout_marginRight="30dp"
android:layout_marginBottom="30dp"
android:text="隱約雷鳴,陰霾天空"/>
<Button
android:id="@+id/tv2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="#465892"
android:layout_above="@+id/tv0"
android:layout_toRightOf="@+id/tv0"
android:layout_alignParentRight="true"
android:layout_marginLeft="30dp"
android:layout_marginBottom="30dp"
android:text="但盼風雨來,能留君在此"/>
<Button
android:id="@+id/tv3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="#458698"
android:layout_below="@+id/tv0"
android:layout_toLeftOf="@+id/tv0"
android:layout_alignParentLeft="true"
android:layout_marginRight="30dp"
android:layout_marginTop="30dp"
android:text="隱約雷鳴,陰霾天空"/>
<Button
android:id="@+id/tv4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="#864745"
android:layout_below="@+id/tv0"
android:layout_toRightOf="@+id/tv0"
android:layout_alignParentRight="true"
android:layout_marginLeft="30dp"
android:layout_marginTop="30dp"
android:text="即使天無雨,我亦留此地"/>
</RelativeLayout>
在上述代碼中,首先創建一個Button組件tv0,處於父控制項的中間的位置。然後使其他的四個Button相對於tv0的位置來設置其位置。具體為:左上角的tv1,將其設置為處於中間tv0的上邊和左邊,且距離其左邊和上邊30dp,以及貼緊父控制項的左邊緣;右上角的tv2,將其設置為處於中間tv0的上邊和右邊,且距離其右邊和上邊30dp,以及貼緊父控制項的右邊緣;左下角的tv3,將其設置為處於中間tv0的下邊和左邊,且距離其左邊和下邊30dp,以及貼緊父控制項的左邊緣;右下角的tv4,將其設置為處於中間tv0的下邊和右邊,且距離右邊和下邊30dp,以及貼緊父控制項的右邊緣。
RelativeLayout的疊加效果,如果不指定每個組件的相對位置,那麼就會都疊加在左上角,有點類似於FrameLayout的疊加效果。當然,一般是指定:android:layout_marginTop、android:layout_marginBottom、 android:layout_marginLeft、android:layout_marginRight四個屬性的屬性值為負值來實現。依然是用代碼來檢測其疊加效果:
主要是講上述五個組件的寬度和高度改為200dp,然後將上述四個屬性的屬性值改為負值
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/relativeLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#acdefb">
<Button
android:id="@+id/tv0"
android:layout_width="150dp"
android:layout_height="150dp"
android:background="#FF0000"
android:layout_centerInParent="true"
android:textSize="24sp"
android:maxLines="2"
android:text="中間相對組件"/>
<Button
android:id="@+id/tv1"
android:layout_width="150dp"
android:layout_height="150dp"
android:background="#012345"
android:layout_above="@+id/tv0"
android:layout_toLeftOf="@+id/tv0"
android:layout_alignParentLeft="true"
android:layout_marginRight="-50dp"
android:layout_marginBottom="-50dp"
android:text="隱約雷鳴,陰霾天空"/>
<Button
android:id="@+id/tv2"
android:layout_width="150dp"
android:layout_height="150dp"
android:background="#465892"
android:layout_above="@+id/tv0"
android:layout_toRightOf="@+id/tv0"
android:layout_alignParentRight="true"
android:layout_marginLeft="-120dp"
android:layout_marginBottom="-50dp"
android:text="但盼風雨來,能留君在此"/>
<Button
android:id="@+id/tv3"
android:layout_width="150dp"
android:layout_height="150dp"
android:background="#458698"
android:layout_below="@+id/tv0"
android:layout_toLeftOf="@+id/tv0"
android:layout_alignParentLeft="true"
android:layout_marginRight="-120dp"
android:layout_marginTop="-50dp"
android:text="隱約雷鳴,陰霾天空"/>
<Button
android:id="@+id/tv4"
android:layout_width="150dp"
android:layout_height="150dp"
android:background="#864745"
android:layout_below="@+id/tv0"
android:layout_toRightOf="@+id/tv0"
android:layout_alignParentRight="true"
android:layout_marginLeft="-50dp"
android:layout_marginTop="-50dp"
android:text="即使天無雨,我亦留此地"/>
</RelativeLayout>
可以看到其疊加效果如上圖所示:
只能是相對處在後面定義的組件疊加在前面的組件上,而不能是相對於前面的組件疊加在後邊的組件上。此處的相對前後表示的是後一個組件的位置是相對前面的組件位置而定的
其次:要用來做後邊組件相對的組件應該在前邊進行定義,以免找不到組件造成錯誤