Android開發指南-用戶界面-通用佈局對象

通用佈局對象Common Layout Objects

本章描述了可用於你的應用程序的一些更爲通用的佈局對象類型。像所有的佈局一樣,它們是ViewGroup.的子類。

也可以參見Hello Views 教程,有更多關於使用Android視圖佈局的指南。

框架佈局FrameLayout

框架佈局FrameLayout 是最簡單的佈局對象類型。它基本上是一個屏幕上的空白空間,你可以稍後填充一個對象-比如,一個切入切出的圖片。所有框架佈局的子元素被釘在屏幕左上角;你不能爲子視圖指定一個不一樣的位置。後續的子視圖只是簡單在之前的視圖上方繪製,部分或完全的掩蓋它們(除非這個新的對象是透明的)。

線性佈局LinearLayout

線性佈局LinearLayout 在單一方向上對齊所有的子視圖-豎向或者橫向,這依賴於你怎麼定義方向orientation 屬性。所有子視圖依次堆積,所以一個豎向列表每行只有一個子視圖,不管它們有多寬,而一個橫向列表將只有一行高(最高子視圖的高度,加上填充)。一個線性佈局LinearLayout 會考慮子視圖之間的邊緣空白margins以及每個子視圖的引力屬性(靠右,居中,或者靠左)。

線性佈局LinearLayout也支持給每個單獨的子視圖分配一個權重。這個屬性分配一個“重要性”數值給一個視圖,並允許它擴展來填充父視圖的任何剩餘空間。子視圖可以指定一個整型權重值,然後任何這個視圖組中的剩餘空間將按照子視圖聲明的比重來分配給它們。缺省權重是0。比如,如果有三個文本框,其中兩個聲明權重爲1,而另一個未給定數值(0),這第三個沒有權重的文本框將不會增長而只是佔據其內容所要求的空間。其它兩個將均勻分配剩餘的空間。如果把第三個控件權重改爲2,那意味着它被聲明爲比其它兩個“更爲重要”,因此它將佔據整個空間的一半,而前面兩個均分剩下的空間。

提示:要在屏幕上創建一個均衡尺寸的佈局,可創建一個容器視圖組對象,其layout_width 和layout_height 屬性設置爲fill_parent; 把子視圖的height或width 賦值爲0; 然後根據比例爲每個子視圖分配相關的weight 值。

下面的兩個窗體呈現了一個帶有若干元素的線性佈局LinearLayout:一個按鈕,一些標籤和文本框。這些文本框把它們的寬度設置爲填充父視圖(fill_parent);其他元素設置爲包含內容(wrap_content)。引力屬性爲缺省的靠左對齊。這兩個窗體的區別是左邊的那個沒有設置權重,而右邊那個窗體中,評論文本框權重被設置爲1。如果名字也設置成1,那麼名字和評論將一樣高。

android linear layout

在一個水平方向的線性佈局LinearLayout中,items按照文本底線位置來對齊(第一個元素的第一行-最上邊或最左邊-被當作參考行)。這樣用戶在窗體中瀏覽元素時並不需要上下跳動來閱讀相鄰元素中的文本。這個特性可以通過在XML佈局中設置android:baselineAligned="false"來關閉。

要查看其他示例代碼,參見Hello LinearLayout教程。

表佈局TableLayout

表佈局TableLayout把它的子視圖定位到行和列中。表佈局容器不顯示行,列和單元的邊界線。表的列和最多行單元數一樣多。一個表可以有空單元,但是單元不能像HTML裏面那樣跨列。

TableRow 對象是一個TableLayout的子視圖(每個TableRow定義了表中的一個單獨行)。每行有0或多個單元,可用任何其他視圖定義。因此,行單元可能由各個視圖對象組成,如ImageView或TextView對象。一個單元也可以是一個ViewGroup對象(比如,你可以嵌入另一個表佈局作爲一個單元)。

下面的示例佈局有兩行,各有兩個單元。旁邊的截圖顯示了效果,單元邊界被顯示爲虛線(爲了增加視覺效果)。

android table layout

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

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

    android:layout_width="fill_parent"

    android:layout_height="fill_parent"

    android:stretchColumns="1">

    <TableRow>

        <TextView

            android:text="@string/table_layout_4_open"

            android:padding="3dip" />

        <TextView

            android:text="@string/table_layout_4_open_shortcut"

            android:gravity="right"

            android:padding="3dip" />

    </TableRow>

    <TableRow>

        <TextView

            android:text="@string/table_layout_4_save"

            android:padding="3dip" />

        <TextView

            android:text="@string/table_layout_4_save_shortcut"

            android:gravity="right"

            android:padding="3dip" />

    </TableRow>

</TableLayout>

列可以被隱藏,帶有延伸標記並填充可用屏幕空間,或者可以被標記爲可收縮來強制這個列縮小直到表適合屏幕。參見TableLayout reference 文檔獲取更多信息。

示範代碼,參見Hello TableLayout教程。

相對佈局RelativeLayout

相對佈局RelativeLayout允許子視圖指定它們和父視圖或彼此之間的相對位置(通過ID指定)。因此你可以按正確的順序對齊兩個元素,或者讓一個視圖在另外一個下面,居於屏幕中間,左邊的中間,等等。元素通過給定順序來繪製,因此如果這第一個元素在屏幕中間,其他以它對齊的元素都會對齊到屏幕中間。同樣,因爲這個順序,如果使用XML來指定這個佈局,你將引用的元素(爲了定位其它視圖對象)必須被列在XML文件中,在你通過引用ID從其他視圖中引用它之前。

這個下面的例子顯示了一個XML文件及其界面效果。注意,在屬性中引用相對元素(比如,layout_toLeft)時使用了一個相對資源語法來引用ID(@id/id)。

<?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="wrap_content"

android:background="@drawable/blue"

android:padding="10px" >

<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:layout_width="fill_parent"

android:layout_height="wrap_content"

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

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

<Button android:id="@+id/ok"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_below="@id/entry"

android:layout_alignParentRight="true"

android:layout_marginLeft="10px"

android:text="OK" />

<Button android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_toLeftOf="@id/ok"

android:layout_alignTop="@id/ok"

android:text="Cancel" />

</RelativeLayout>

其中一些特性直接由元素支持,另外一些由它的LayoutParams成員變量支持(爲所有這個屏幕中的元素子類化RelativeLayout,因爲所有元素都是RelativeLayout父對象的子元素)。已定義的相對佈局RelativeLayout參數是:width, height, below, alignTop, toLeft, padding[Bottom|Left|Right|Top],以及 margin[Bottom|Left|Right|Top]。注意其中一些參數明確支持相對佈局位置-它們的數值必須是你的相對位置元素的ID。比如,爲一個TextView分配參數toLeft="my_button" 將把TextView放在視圖ID爲my_button的左邊(這必須寫在XML中的TextView前面)。

示範代碼,參見Hello RelativeLayout 教程。

關於重要視圖組的總結Summary of Important View Groups

下面這些對象都用來容納用戶界面元素。一些提供了自己的可見界面格式,而其他一些是不可見的結構,僅僅用來管理子視圖的佈局。

描述

框架佈局FrameLayout

作爲一個視圖框架來顯示一個單獨的對象。

畫廊Gallery

一個水平滾動的圖像顯示。

網格視圖GridView

顯示一個滾動網格m列n行。

線性佈局LinearLayout

一個把子視圖組織進單個水平或豎向行的佈局。它創建一個滾動條如果窗口長度超過屏幕長度的話。

列表視圖ListView

顯示一個滾動單列列表。

相對佈局RelativeLayout

使你可以指定子對象之間的相對位置(如,A在B的左邊)或者相對於父對象的位置(如,與父視圖頂部對齊)

滾動視圖ScrollView

一個豎向的滾動元素列。

微調器Spinner

從一組數據中每次顯示一個單獨的項,在一個單行的文本框裏。很像可以橫向或豎向滾動的單行列表框。(譯註:這個並不是windows平臺通常理解的那個用來上下調整數值的小控件Spin Control,雖然名字很相近)

平面視圖SurfaceView

提供一個專門的繪畫平面的直接訪問。它可以含有子視圖層疊在這個平面上,但通常是爲了給需要直接畫像素的應用程序使用,而不是直接使用部件。

標籤欄TabHost

提供一個標籤選擇列表,監控用戶點擊動作並使得應用程序在一個標籤被點擊時改變屏幕顯示。

表佈局TableLayout

一個表佈局含有任意數量的行和列,每個單元包含你選擇的部件。行的尺寸會自動調整來適應最大的列。單元邊界不可見。

翻轉視圖ViewFlipper

一個一次只顯示一項的列表,在一個單行文本框裏。它可以被設置成定期切換items,就像幻燈片那樣。

切換視圖ViewSwitcher

和翻轉視圖一樣。

發佈了48 篇原創文章 · 獲贊 34 · 訪問量 34萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章