转载自 guxuetianya
最终编辑 hanyucola
Android Layout之三:RalativeLayout(一)
2010-03-10 11:43
我们从RalativeLayout可以知道,该布局的父子Container中所有的Widgets之间的位置都是相对的。你可以把Widget A放在Widget的左下方,或者放在Widget的底边并和Container的底边之间。它允许为Container或者widget指定其相对于其他widgets或者父Container的位置。Container或者widgets是按顺序排列的,如果第一个Container或者widget在屏幕的中央,那么相对于其的其他Container和widgets将以屏幕的中央来排列。如果使用XML的Layout文件来定义,被引用的Container或者widgets必须被定义。
在XML的layout文件中,我们就能够引用同一文件的Widgets,并且可以标识其他Widgets的相对位置。
标识一个Widgets在其Container中的位置,我们有下面的属性参数可以用,这些参数的值可以使true或者false:
1).android:layout_alignParentTop:表示widget的顶部和Container的顶部重合。
2).android:layout_alignParentBottom:表示widget的底部和Container的底部重合。
3).android:layout_alignParentLeft:表示widget的左边和Container的左边重合。
4).android:layout_alignParentRight:表示widget的右边和Container的右边重合。
5).android:layout_centerHorizontal:表示widget处于Container水平方向上的中间。
6).android:layout_centerVertical:表示widget处于Container垂直方向上的中间。
7).android:layout_centerInParent:表示widget处于Container平面上的正中间。
标识同一个Container中的不同的widgets之间的相对位置时,可有用如下的属性参数,参数值是其他widgets的应用。相对位置上的widgets的引用的设定如下:首先必须给所有的被引用的widgets赋予标示符,通过android:id的属性,格式如@+id/widget1,然后在其他widget引用的时候使用同样的标示符,格式如@id/widget1,例:如果widget A标识为@+id/widget A,则widget B在其属性里面通过@id/widget A引用widget A。
1).android:layout_above:表示该widget必须位于参数值标识的widget的上方。
2).android:layout_below:表示该widget必须位于参数值标识的widget的下方。
3).android:layout_toLeftOf:表示该widget必须位于参数值标识的widget的左方。
4).android:layout_toLeftOf:表示该widget必须位于参数值标识的widget的右方。
5).android:layout_alignTop:表示该widget的顶部必须参数值标识的widget的顶部重合。
6).android:layout_alignBottom:表示该widget的底部必须参数值标识的widget的底部重合。
7).android:layout_alignLeft:表示该widget的左边必须参数值标识的widget的左边重合。
8).android:layout_alignRight:表示该widget的右边必须参数值标识的widget的右边重合。
9).android:layout_alignBaseLine:表示该widget的BaseLine必须参数值标识的widget的BaseLine重合。这个主要用于Label或者其他包含文本的widgets。
在我们引用widget时不能引用该文件中尚未定义的widget。
具体的示例如下:
1: xml version="1.0" encoding="utf-8"?>
2:
3: <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
4:
5: android:layout_width="fill_parent"
6:
7: android:layout_height="wrap_content"
8:
9: android:padding="5px"
10:
11: >
12:
13: <TextView android:id="@+id/label"
14:
15: android:layout_width="wrap_content"
16:
17: android:layout_height="wrap_content"
18:
19: android:text="URL:"
20:
21: android:paddingTop="15px"/>
22:
23: <EditText android:id="@+id/entry"
24:
25: android:layout_width="fill_parent"
26:
27: android:layout_height="wrap_content"
28:
29: android:layout_toRightOf="@id/label"
30:
31: android:layout_alignBaseline="@id/label"
32:
33: />
34:
35: <Button android:id="@+id/ok"
36:
37: android:layout_width="wrap_content"
38:
39: android:layout_height="wrap_content"
40:
41: android:layout_below="@id/entry"
42:
43: android:layout_alignRight="@id/entry"
44:
45: android:text="OK"
46:
47: />
48:
49: <Button android:id="@+id/cancel"
50:
51: android:layout_width="wrap_content"
52:
53: android:layout_height="wrap_content"
54:
55: android:layout_toLeftOf="@id/ok"
56:
57: android:layout_alignTop="@id/ok"
58:
59: android:text="cancel"
60:
61: />
62:
63: RelativeLayout>
64:
65:
RelativeLayout关系布局:
在form中的用法:"@[+][package:]type:name" (@id/viewName)
在主题模式form中的用法:"?[package:][type:]name".(还没见过相关的例子)
android:layout_above VS android:layout_below:
设定当前view和相关的view在垂直方向上的关系,above是上相关view的上面,below是在相关view的下面,above让当前view的下面界和相关view的上边界对齐。相反below则是将当前view和相关view的上边界对齐。
在form中的用法:"@[+][package:]type:name" (@id/viewName)
在主题模式form中的用法:"?[package:][type:]name".(还没见过相关的例子)
android:layout_alignBaseline
大概相当于水平中心线对齐。
android:layout_alignBottom
android:layout_alignLeft
android:layout_alignRight
android:layout_alignTop
以上这些同理。
android:layout_alignParentBottom
android:layout_alignParentLeft
android:layout_alignParentRight
android:layout_alignParentTop
android:layout_centerHorizontal
android:layout_centerInParentc
android:layout_centerVertical
以上四项是指在父容器中的位置。
android:layout_alignWithParentIfMissing
If set to true, the parent will be used as the anchor when the anchorcannot be be found for layout_toLeftOf, layout_toRightOf, etc.
如果设为true,当找不到toLeftOf或toRightOf的view的时候,父容器将成为锚点,以父容器做为布局的依据。