Android UI之RealtiveLayout(相對布局)

來源:互聯網
上載者:User

標籤: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(相對布局)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.