相對佈局的使用

探討相對佈局的重要特性和屬性

現在讓我們來討論一些幫助配置相對佈局和它的子控件的屬性。一些特定的屬性用於相對佈局,也就是子規則,包括:

  • 用於子控件在父佈局中居中的規則,包括:水平居中,垂直居中,或者兩者皆居中。
  • 用於子控件在父佈局中排布的規則,包括:在頂部,底部,左,右邊緣放置。
  • 用於子控件相對於其它子控件排布的規則,包括:在另一個控件頂,底,左,右邊緣放置。
  • 用於子控件相對於其它子控件放置的規則,包括:在另一個控件上面,底下,左邊或右邊放置。

同樣的,通用的 ViewGroup-style屬性也可以應用於相對佈局。這些屬性包括:

  • 通用佈局參數比如layout_height(必須)和layout_width(必須)(類:ViewGroup.LayoutParams)
  • 邊距佈局參數比如margin_top, margin_left, margin_right和margin_bottom (類:ViewGroup. MarginLayoutParams)
  • 佈局參數比如layout_height和layout_width (類:ViewGroup.LayoutParams)

現在讓我們來實踐這些規則吧!

使用佈局規則

讓我們看一個更復雜的屏幕設計。爲了這個練習,我們從查看最終屏幕效果開始,然後再倒回來工作,並討論這個相對佈局的特性和爲了達到最終結果所使用的規則。

我們希望設計一個如下所示的屏幕:


爲了使用相對佈局來設計這個屏幕,參考以下步驟。

步驟1:在你的XML資源文件中定義一個相對佈局

首先,在你的XML資源文件中定義一個相對佈局。因爲你想這個佈局控制整個屏幕的內容,所以設置它的高和寬屬性爲fill_parent。你的XML資源文件應該看起來像這樣:

以下是代碼片段:
<?xml version="1.0" encoding="utf-8"?>
 <RelativeLayout
 xmlns:android="http://schemas.android.com/apk/res/android"
 android:layout_height="fill_parent"
 android:layout_width="fill_parent">

</RelativeLayout>

 

步驟2:確定子控件

接下來,我們確定需要什麼樣的子控件。在這裏,我們需要7TextView控件(第個一種顏色)。像平常一樣配置它們,設置文本屬性爲字符串,背景色,字號等等。將這些控件都放到相對佈局中。

步驟3:定義相對佈局規則

接下來,我們爲每個子控件定義規則,以使它們被繪製到合適的位置:

  • RED TextView控件沒有特別的設置。默認地,這個控件將會被繪製到父佈局的左上角。
  • ORANGE TextView控件在父佈局中水平居中。因爲所有控件默認都會靠向屏幕的左上角,這有效地將控件定位到父佈局的邊緣頂部中間。
  • YELLOW TextView控件定位到父佈局的右邊緣。因爲所有控件默認都會靠向屏幕的左上角,這有效的定位控件到父佈局的右上角。
  • GREEN TextView控件在父佈局中垂直居中,並且設置爲顯示在BLUE TextView控件的左邊。
  • BLUE TextView控件被定位在父控件的中心(水平和垂直)。這將它顯示在屏幕的中心位置。
  • INDIGO TextView控件在父局中垂直居中,並且設置爲顯示在BLUE TextView控件的右邊。
  • VIOLET TextView控件被定位到父佈局的底部邊緣。它的寬度也被設置爲填滿父容器,允許它延伸到屏幕的底部邊緣。

如果你在你的XML資源文件中定義這些規則,XML文件代碼將看起如下:

以下是代碼片段:
<?xml version="1.0" encoding="utf-8"?>
 <RelativeLayout
 xmlns:android="http://schemas.android.com/apk/res/android"
 android:layout_height="fill_parent"
 android:layout_width="fill_parent">

<TextView
 android:text="RED"
 android:id="@+id/TextView01"
 android:layout_height="wrap_content"
 android:background="#f00"
 android:gravity="center"
 android:textColor="#000"
 android:layout_width="wrap_content"
 android:padding="25dp"></TextView>

<TextView
 android:text="ORANGE"
 android:layout_height="wrap_content"
 android:background="#ffa500"
 android:gravity="center"
 android:textColor="#000"
 android:id="@+id/TextView02"
 android:layout_width="wrap_content"
 android:layout_centerHorizontal="true"
 android:padding="25dp"></TextView>

<TextView
 android:text="YELLOW"
 android:layout_height="wrap_content"
 android:background="#ffff00"
 android:gravity="center"
 android:textColor="#000"
 android:id="@+id/TextView03"
 android:layout_width="wrap_content"
 android:layout_alignParentRight="true"
 android:padding="25dp"></TextView>

<TextView
 android:text="GREEN"
 android:layout_height="wrap_content"
 android:background="#0f0"
 android:gravity="center"
 android:textColor="#000"
 android:id="@+id/TextView04"
 android:layout_width="wrap_content"
 android:layout_toLeftOf="@+id/TextView05"
 android:padding="25dp"
 android:layout_centerVertical="true"></TextView>

<TextView
 android:text="BLUE"
 android:layout_height="wrap_content"
 android:background="#00f"
 android:gravity="center"
 android:textColor="#fff"
 android:id="@+id/TextView05"
 android:layout_width="wrap_content"
 android:layout_centerInParent="true"
 android:layout_margin="10dp"
 android:padding="25dp"></TextView>

<TextView
 android:text="INDIGO"
 android:layout_height="wrap_content"
 android:gravity="center"
 android:textColor="#fff"
 android:id="@+id/TextView06"
 android:layout_width="wrap_content"
 android:layout_toRightOf="@+id/TextView05"
 android:background="#4b0082"
 android:padding="25dp"
 android:layout_centerVertical="true"></TextView>

<TextView
 android:text="VIOLET"
 android:layout_height="wrap_content"
 android:background="#ee82ee"
 android:gravity="center"
 android:textColor="#000"
 android:id="@+id/TextView07"
 android:layout_alignParentBottom="true"
 android:layout_width="fill_parent"
 android:padding="25dp"></TextView>

</RelativeLayout>

 

相對佈局使用技巧

這裏是一些使用相對佈局的技巧。

  • 相對佈局的子控件必須有唯一的id屬性以使規則正確應用。
  • 當心循環規則。循環規則發生在兩個控件具有互相指向的規則時。如果你在佈局設計中使用了循環規則,你將會得到以下錯誤信息:

IllegalStateException: Circular dependencies cannot exist in a RelativeLayout(相對佈局中不允許存在循環依賴)

  • 回憶一下相對佈局規則的應用被一次處理是很有用的
  • 保持你的相對佈局規則最小化。這減小了循環規則的機率並且使得你的佈局更加可維護和靈活。
  • 一般地,記住測試一下你的佈局設計在橫屏和豎屏模式下,以及在不同的屏幕大小和解決方案下是不是符合預期的。
  • 使用相對佈局代替嵌套線性佈局以改進程序性能和響應能力。
  •  

總結

Android程序用戶界面使用佈局來定義,相對佈局是用於使得程序屏幕更加靈活和強大的佈局類型之一。相對佈局允許子控件相對於其它子控件和相對於父控件(邊緣以及水平和垂直居中)來組織。一旦你掌握瞭如何使用相對佈局的規則,它們可以有非常多的用處,使你能夠創建複雜佈局,而不需要過多嵌套不同的佈局,因此也改進了性能。[English]

轉載請註明:

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章