天天看點

Android中文API(99)—— RelativeLayout

正文

一、結構

public class RelativeLayout extends ViewGroup

java.lang.Object

android.view.View

android.view.ViewGroup

         android.widget.RelativeLayout

直接子類

  DialerFilter, TwoLineListItem

  二、概述

    

  RelativeLayout顧名思義,相對布局,在這個容器内部的子元素們可以使用彼此之間的相對位置或者和容器間的相對位置來進行定位。

  (譯者注:這點額外要注意,當然這也很好了解,如果容器是不定高的,那麼子元素當然無法對齊容器的底邊^_^)。

  三、常量

資料類型

常量名稱

描述

int

ABOVE

定義将元素的底邊對齊另一個元素的頂邊

ALIGN_BASELINE

定義将元素基線的對齊另一個元素的基線

ALIGN_BOTTOM

定義将元素底邊的對齊另一個元素的底邊

ALIGN_LEFT

定義将元素的左邊對齊另一個元素的左邊

ALIGN_PARENT_BOTTOM

定義将元素的底邊對齊其父容器(RelativeLayout)的底邊

ALIGN_PARENT_LEFT

定義将元素的左邊對齊其父容器(RelativeLayout)的左邊

ALIGN_PARENT_RIGHT

定義将元素的右邊對齊其父容器(RelativeLayout)的右邊

ALIGN_PARENT_TOP

定義将元素的頂邊對齊其父容器(RelativeLayout)的頂邊

ALIGN_RIGHT

定義将元素的右邊對齊另一個元素的右邊

ALIGN_TOP

定義将元素的頂邊對齊另一個元素的頂邊

BELOW

定義将元素的頂邊對齊另一個元素的底邊

CENTER_HORIZONTAL

定義讓元素在容器(RelativeLayout)内水準居中

CENTER_IN_PARENT

定義讓元素位于容器(RelativeLayout)的中心

CENTER_VERTICAL

定義讓元素在容器(RelativeLayout)内垂直居中

LEFT_OF

定義将元素的右邊對齊另一個元素的左邊

RIGHT_OF

定義将元素的左邊對齊另一個元素的右邊

TRUE

  四、内部類

    Class       RelativeLayout.LayoutParams    

    和RelativeLayout相關聯的布局資訊.

  五、XML屬性

屬性名稱

android:gravity

設定容器中的内容該如何定位。對象本身的x和y軸。

android:ignoreGravity

設定容器中的哪個子元素會不受Gravity的影響.

(譯者注:接收參數:子元素的Id,如果設定成為0,則全部子元素都會受到影響)

  六、公共方法

  public boolean dispatchPopulateAccessibilityEvent (AccessibilityEvent event)

  參數

                   event       事件本身.

                 傳回值

                       如果事件分發完成,傳回真。

  public RelativeLayout.LayoutParams generateLayoutParams (AttributeSet attrs)

  傳回一個新的已設定屬性集合的布局參數。

                   attrs        建構layout布局參數的屬性集合.

                       一個RelativeLayout.LayoutParams的執行個體或者他的一個子類

  public int getBaseline ()

           傳回視窗空間的文本基準線到其頂邊界的偏移量。如果這個部件不支援基準線對齊,這個方法傳回-1。

             傳回值

                   基準線的偏移量,如果不支援基準線對齊則傳回-1

  public void requestLayout ()

           當容器中的某個視圖發生改變,會影響整個布局時,就調用這個方法,他會改變整個視圖樹的布局。

  public void setGravity (int gravity)

           描述子視圖該如何擺放,預設值是Gravity.LEFT | Gravity.TOP(譯者注:說明RelativeLayout的元素如果不設定位置,會從左上角開始堆疊)。

                 相關的XML屬性

                   android:gravity

                 參見

  public void setHorizontalGravity (int horizontalGravity)

  public void setVerticalGravity (int verticalGravity))

  public void setIgnoreGravity (int viewId)

           定義容器中的那個VIew會忽略容器設定的Gravity,如果容器設定的Gravity是Gravity.LEFT | Gravity.TOP時,定義這個屬性沒有任何效果。

                  viewId      将要忽略容器Gravity的視圖的id,設定為0則不會有任何View忽略Gravity.

                   android:ignoreGravity

  七、受保護方法

  protected boolean checkLayoutParams (ViewGroup.LayoutParams p)

          (譯者注:檢測是不是AbsoluteLayout.LayoutParams的執行個體)     

  protected ViewGroup.LayoutParams  generateDefaultLayoutParams ()

           傳回一組寬度為WRAP_CONTENT,高度為WRAP_CONTENT,坐标是(0,0)的布局參數。

                       一組預設的布局參數或null值。

  protected ViewGroup.LayoutParams generateDefaultLayoutParams ( ViewGroup .LayoutParams p)

           傳回一組合法的受支援的布局參數。當一個ViewGroup傳遞一個布局參數沒有通過checkLayoutParams(android.view.ViewGroup.LayoutParams)檢測的視圖時,此方法被調用。此方法會傳回一組新的适合目前ViewGroup的布局參數,可能從指定的一組布局參數中複制适當的屬性。

                   p      被轉換成一組适合目前 ViewGroup的布局參數.

                       一個ViewGroup.LayoutParams的執行個體或者其中的一個子節點

  protected void onLayout (boolean changed, int l, int t, int r, int b)

           在此視圖view給他的每一個子元素配置設定大小和位置時調用。 派生類可以重寫此方法并且重新安排他們子類的布局。

                  changed  這是目前視圖view的一個新的大小或位置

   l        相對于父節點的左邊位置

     t        相對于父節點的頂點位置

     r        相對于父節點的右邊位置

     b       相對于父節點的底部位置

  public void onMeasure (int widthMeasureSpec, int heightMeasureSpec)

           測量視圖以确定其内容寬度和高度。此方法被measure(int, int)調用。需要被子類重寫以提供對其内容準确高效的測量。

  約定:當重寫此方法時,你必須調用setMeasuredDimension(int, int)來儲存目前視圖view的寬度和高度。不成功調用此方法将會導緻一個IllegalStateException異常,是由measure(int, int)抛出。是以調用父類的onMeasure(int, int)方法是必須的。

  父類的實作是以背景大小為預設大小,除非MeasureSpec(測量細則)允許更大的背景。子類可以重寫onMeasure(int,int)以對其内容提供更佳的尺寸。

  如果此方法被重寫,那麼子類的責任是确認測量高度和測量寬度要大于視圖view的最小寬度和最小高度(getSuggestedMinimumHeight() and getSuggestedMinimumWidth()),使用這兩個方法可以取得最小寬度和最小高度。

                   widthMeasureSpec          強加于父節點的橫向空間要求。要求是使用View.MeasureSpec進行編碼。

                   heightMeasureSpec         強加于父節點的縱向空間要求。要求是使用View.MeasureSpec進行編碼。

  八、補充

  文章精選

  示例代碼

<?xml version="1.0" encoding="utf-8"?>

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"

    android:layout_width="fill_parent"

    android:layout_height="fill_parent">

    <TextView

        android:id="@+id/label"

        android:layout_width="fill_parent"

        android:layout_height="wrap_content"

        android:text="Type here:"/>

    <EditText

        android:id="@+id/entry"

        android:background="@android:drawable/editbox_background"

        android:layout_below="@id/label"/>

    <Button

        android:id="@+id/ok"

        android:layout_width="wrap_content"

        android:layout_below="@id/entry"

        android:layout_alignParentRight="true"

        android:layout_marginLeft="10dip"

        android:text="OK" />

        android:layout_toLeftOf="@id/ok"

        android:layout_alignTop="@id/ok"

        android:text="Cancel" />

</RelativeLayout>

本文轉自over140 51CTO部落格,原文連結:http://blog.51cto.com/over140/582395,如需轉載請自行聯系原作者

繼續閱讀