標籤:android relativelayout 布局 教程 相對布局
Android基礎入門教程——2.2.2 RelativeLayout(相對布局)
標籤(空格分隔): Android基礎入門教程
本節引言:
在上一節中我們對LinearLayout進行了詳細的解析,LinearLayout也是我們
用的比較多的一個布局,我們更多的時候更鐘情於他的weight(權重)屬性,等比例劃分,對螢幕適配還是
協助蠻大的;但是使用LinearLayout的時候也有一個問題,就是當介面比較複雜的時候,需要嵌套多層的
LinearLayout,這樣就會降低UI Render的效率(渲染速度),而且如果是listview或者GridView上的
item,效率會更低,另外太多層LinearLayout嵌套會佔用更多的系統資源,還有可能引發stackoverflow;
但是如果我們使用RelativeLayout的話,可能僅僅需要一層就可以完成了,以父容器或者兄弟組件參考+margin
+padding就可以設定組件的顯示位置,是比較方便的!當然,也不是絕對的,具體問題具體分析吧!
總結就是:盡量使用RelativeLayout + LinearLayout的weight屬性搭配使用吧!
1.核心屬性圖
2.父容器定位屬性
3.根據兄弟組件定位
恩,先說下什麼是兄弟組件吧,所謂的兄弟組件就是處於同一層次容器的組件,
圖中的組件1,2就是兄弟組件了,而組件3與組件1或組件2並不是兄弟組件,所以組件3不能通過
組件1或2來進行定位,比如layout_toleftof = “組件1”這樣是會報錯的!切記!
關於這個兄弟組件定位的最經典例子就是”梅花布局”了,下面代碼實現下:
運行:
實現代碼:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/RelativeLayout1" android:layout_width="match_parent" android:layout_height="match_parent" > <!-- 這個是在容器中央的 --> <ImageView android:id="@+id/img1" android:layout_width="80dp" android:layout_height="80dp" android:layout_centerInParent="true" android:src="@drawable/pic1"/> <!-- 在中間圖片的左邊 --> <ImageView android:id="@+id/img2" android:layout_width="80dp" android:layout_height="80dp" android:layout_toLeftOf="@id/img1" android:layout_centerVertical="true" android:src="@drawable/pic2"/> <!-- 在中間圖片的右邊 --> <ImageView android:id="@+id/img3" android:layout_width="80dp" android:layout_height="80dp" android:layout_toRightOf="@id/img1" android:layout_centerVertical="true" android:src="@drawable/pic3"/> <!-- 在中間圖片的上面--> <ImageView android:id="@+id/img4" android:layout_width="80dp" android:layout_height="80dp" android:layout_above="@id/img1" android:layout_centerHorizontal="true" android:src="@drawable/pic4"/> <!-- 在中間圖片的下面 --> <ImageView android:id="@+id/img5" android:layout_width="80dp" android:layout_height="80dp" android:layout_below="@id/img1" android:layout_centerHorizontal="true" android:src="@drawable/pic5"/> </RelativeLayout>
4.margin與padding的區別
初學者對於這兩個屬性可能會有一點混淆,這裡區分下:
首先margin代表的是位移,比如marginleft = “5dp”表示組件離容器左邊緣位移5dp;
而padding代表的則是填充,而填充的對象針對的是組件中的元素,比如TextView中的文字
比如為TextView設定paddingleft = “5dp”,則是在組件裡的元素的左邊填充5dp的空間!
margin針對的是容器中的組件,而padding針對的是組件中的元素,要區分開來!
下面通過簡單的代碼示範兩者的區別:
比較範例程式碼如下:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context=".MainActivity" > <Button android:id="@+id/btn1" android:layout_height="wrap_content" android:layout_width="wrap_content" android:text="Button"/> <Button android:paddingLeft="100dp" android:layout_height="wrap_content" android:layout_width="wrap_content" android:text="Button" android:layout_toRightOf="@id/btn1"/> <Button android:id="@+id/btn2" android:layout_height="wrap_content" android:layout_width="wrap_content" android:text="Button" android:layout_alignParentBottom="true"/> <Button android:layout_marginLeft="100dp" android:layout_height="wrap_content" android:layout_width="wrap_content" android:text="Button" android:layout_toRightOf="@id/btn2" android:layout_alignParentBottom="true"/> </RelativeLayout>
運行比較:
5.很常用的一點:margin可以設定為負數
相信很多朋友都不知道一點吧,平時我們設定margin的時候都習慣了是正數的,
其實是可以用負數的,下面寫個簡單的程式示範下吧,類比進入軟體後,彈出廣告
頁面的,右上方的cancle按鈕的margin則是使用負數的!
如下:
貼出的廣告Activity的布局代碼吧,當然,如果你對這個有興趣的話可以下下demo,
因為僅僅是實現效果,所以代碼會有些粗糙!
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.jay.example.relativelayoutdemo.MainActivity" android:background="#00CCCCFF"> <ImageView android:id="@+id/imgBack" android:layout_width="200dp" android:layout_height="200dp" android:layout_centerInParent="true" android:background="@drawable/myicon" /> <ImageView android:id="@+id/imgCancle" android:layout_width="28dp" android:layout_height="28dp" android:layout_alignRight="@id/imgBack" android:layout_alignTop="@id/imgBack" android:background="@drawable/cancel" android:layout_marginTop="-15dp" android:layout_marginRight="-10dp" /> </RelativeLayout>
本節小結:
關於RelativeLayout的詳解就到這裡,有什麼紕漏,錯誤,好的建議,歡迎提出~
最後提供下上面的demo代碼供大家下載:RelativeLayoutDemo
著作權聲明:本文為博主原創文章,未經博主允許不得轉載。
Android基礎入門教程——2.2.2 RelativeLayout(相對布局)