標籤:ui android realtivela 布局
說明:RealtiveLayout是目前android開發中最最常用的布局管理器(比LinearLayout還常用),布局內的子組件的位置總是相互依照其他子組件和RealtiveLayout布局本身來確定的。這樣最大的好處就是更加自由靈活,可以設計出更加炫酷複雜的介面,而且可以在IDE中通過直接拖拽來進行介面的布局設計。
注意:RealtiveLayout的子組件不可以設定android:layout_gravity屬性。
RealtiveLayout中需要關注的屬性就比較多了,大概可以分為三類:
1 android:ignoreGravity
對應方法:setIgnoreGravity(int)
說明:設定不受gravity屬性影響的子組件。跟其他布局一樣,Realtivelayout也可以使用android:gravity屬性來設定其子組件的擺放位置,但RealtiveLayout需要實現更加複雜的布局,所以為所有組件設定統一的擺放方式難以滿足實際開發中的一些特殊需求,於是就有了這個屬相來進行特殊的忽略。
舉個栗子:
<RelativeLayout android:gravity="bottom" android:ignoreGravity="@id/view1" android:layout_width="fill_parent" android:layout_height="fill_parent"> <ImageView android:id="@+id/view1" android:layout_width="100dp" android:layout_height="100dp" android:scaleType="fitXY" android:src="@drawable/muogu" /> <ImageView android:layout_width="100dp" android:layout_height="100dp" android:scaleType="fitXY" android:src="@drawable/nailiu16" /></RelativeLayout>
可以看到,由於RealtiveLayout中設定了gravity為bottom,所以第二個ImageView被擺放到了布局的底部,而ignoreGravity中設定了的view1就依然是我行我素地從左上方開始擺放。
2 只能設定為true、false的xml屬性
說明:這一類屬性主要是為了彌補RealtiveLayout子組件不能設定layout_gravity屬性的遺憾,可以直接為子組件指定擺放位置。
以下是這類屬性的屬性工作表:
| 屬性名稱 |
功能說明 |
| android:layout_centerHoriazontal |
控制該子組件是否相對於父容器水平置中 |
| android:layout_centerVertical |
控制該子組件是否相對於父容器垂直置中 |
| android:layout_centerInParent |
控制該子組件是否相對於父容器置中 |
| android:layout_alignParentBottom |
控制該子組件是否與父容器底端對齊 |
| android:layout_alignParentTop |
控制該子組件是否與父容器頂端對齊 |
| android:layout_alignParentLeft |
控制該子組件是否與父容器左端對齊 |
| android:layout_alignParentRight |
控制該子組件是否與父容器右端對齊 |
| android:layout_alignParentEnd |
控制該子組件是否與父容器結束對齊(大部分情況下與alignParentRight一個效果) |
| android:layout_alignParentStart |
控制該子組件是否與父容器開始對齊(大部分情況下與alignParentLeft一個效果) |
需要注意的是,這些屬相是可以同時使用的,不過如果同時使用相互衝突的屬性(比如layout_alignParentLeft和layout_alignParentRight)會產生一些比較古怪的效果,所以不建議同時使用有衝突的屬性。
<RelativeLayout android:layout_width="fill_parent" android:layout_height="fill_parent"> <ImageView android:id="@+id/view1" android:layout_width="100dp" android:layout_height="100dp" android:scaleType="fitXY" android:layout_alignParentLeft="true" android:layout_alignParentRight="true" android:layout_centerVertical="true" android:layout_centerHorizontal="true" android:src="@drawable/muogu" /></RelativeLayout>
系統會努力去適應所有的屬性,導致組件被展開成很古怪的樣子。
3 只能設定為其他UI組件ID的xml屬性
說明:這些屬相就是RealtiveLayout的核心屬性,就是通過這些屬性,來確定各個子組件在布局方面的相互關係的。
以下是這類屬性的屬性工作表:
| 屬性名稱 |
功能說明 |
| android:layout_toRightOf |
控制該子組件位於ID指定組件的右側 |
| android:layout_toLeftOf |
控制該子組件位於ID指定組件的左側 |
| android:layout_above |
控制該子組件位於ID指定組件的上方 |
| android:layout_below |
控制該子組件位於ID指定組件的下方 |
| android:layout_alignTop |
控制該組件頂端與ID指定組件的上邊界對齊 |
| android:layout_alignBottom |
控制該底端組件與ID指定組件的下邊界對齊 |
| android:layout_alignLeft |
控制該組件左端與ID指定組件的左邊界對齊 |
| android:layout_alignRight |
控制該組件右端與ID指定組件的右邊界對齊 |
| android:layout_alignStart |
控制該組件起始位置與ID指定組件的起始位置對齊(大部分情況下與layout_alignLeft效果相同) |
| android:layout_alignEnd |
控制該組件結束位置與ID指定組件的結束位置對齊(大部分情況下與layout_alignRight效果相同) |
另外可以使用margin或padding對組件進行細微的調整,如下所示:
<RelativeLayout android:layout_width="fill_parent" android:layout_height="fill_parent"> <ImageView android:id="@+id/view1" android:layout_width="100dp" android:layout_height="100dp" android:layout_alignParentEnd="true" android:src="@drawable/nailiu16" android:scaleType="fitXY" /> <ImageView android:id="@+id/view2" android:layout_width="100dp" android:layout_height="100dp" android:src="@drawable/muogu" android:scaleType="fitXY" android:layout_alignParentRight="true" android:layout_below="@+id/view1" /> <ImageView android:layout_width="100dp" android:layout_height="100dp" android:src="@drawable/muogu" android:scaleType="fitXY" android:layout_margin="50dp" android:layout_alignParentRight="true" android:layout_alignBottom="@+id/view2" /></RelativeLayout>
附:引用聲明
《瘋狂Android講義(第二版)》 李剛 《2.2.4 相對布局》 電子工業出版社
Android UI之RealtiveLayout(相對布局)