簡介
在介紹Android的布局管理器之前,有必要讓了解Android平台下的控件類。首先要了解的是View類,該類為所有可視化控件的基類,主要提供了控件繪制和事件處理的方法。建立使用者界面所使用的控件都繼承自View,如TextView、Button、CheckBox等。
關于View及其子類的相關屬性,既可以在布局XML檔案中進行設定,也可以通過成員方法在代碼中動态設定。View類常用的屬性及其對應方法如表1所示。
表1 View類常用屬性及對應方法說明
說明:任何繼承自View的子類都将擁有View類的以上屬性及對應方法。
android:layout_gravity:是用于指定控件在布局中的對齊 方 式 。 android:layout_gravity 的 可 選 值 和 android:gravity 差 不 多 , 但 是 需 要 注 意 , 當 LinearLayout 的排列方向是 horizontal 時,隻有垂直方向上的對齊方式才會生效,因為此時水 平方向上的長度是不固定的,每添加一個控件,水準方向上的長度都會改變,因而無法指定 該方向上的對齊方式。同樣的道理,當 LinearLayout 的排列方向是 vertical 時,隻有水準方 向上的對齊方式才會生效。
android:layout_weight:指定該子元件的布局寬度度。
這個屬性允許我們使用比例的方式來指定控件的大小。形容的是本view和父容器的關系;而view中的width是用來描述自己本身的。用來配置設定空間大小。
android:layout_height:指定該子元件的高度。
相對布局(RelativeLayout)
顧名思義是有參照的,就是以某個兄弟元件,或者父容器來決定的(兄弟元件是在一個同一個布局裡面的元件,如果是布局裡一個元件參照另一個布局裡的元件會出錯)。合理地利用好LinearLayout的weight權重屬性和RelativeLayout相 對布局,可以解決螢幕分辨率不同的自适應問題。
在相對布局中,子控件的位置是相對兄弟控件或父容器而決定的。出于性能考慮,在設計相對布局時要按照控件之間的依賴關系排列,如View A的位置相對于View B來決定,則需要保證在布局檔案中View B在View A的前面。
在進行相對布局時用到的屬性很多,首先來看屬性值隻為true或false的屬性,如表2所示。
表2 相對布局中隻取true或false的屬性
接下來再來看屬性值為其他控件id的屬性,如表3所示。
表3 相對布局中取值為其他控件id的屬性及說明
最後要介紹的是屬性值以像素為機關的屬性及說明,如表4所示。
表4 相對布局中取值為像素的屬性及說明
需要注意的是在進行相對布局時要避免出現循環依賴,例如設定相對布局在父容器中的排列方式為WRAP_CONTENT,就不能再将相對布局的子控件設定為ALIGN_PARENT_ BOTTOM。因為這樣會造成子控件和父控件互相依賴和參照的錯誤。
線性布局(LinearLayout)
提供了控件水準或者垂直排列的模型。同時,使用此布局時可以通過設定控件的weight參數控制各個控件在容器中的相對大小。LinearLayout布局的屬性既可以在布局檔案(XML)中設定,也可以通過成員方法進行設定。表5給出了LinearLayout常用的屬性及這些屬性的對應設定方法。
表5 LinearLayout常用屬性及對應設定方法
線上性布局中可使用gravity屬性來設定控件的對齊方式,gravity可取的屬性值及說明如表6所示。
提示:當需要為gravity設定多個值時,用“|”分隔即可。
表6 gravity可取的屬性值及說明
表格布局(TableLayout)
以行和列的形式管理控件,每行為一個TableRow對象,也可以為一個View對象,當為View對象時,該View對象将跨越該行的所有列。在TableRow中可以添加子控件,每添加一個子控件為一列。
TableLayout繼承自LinearLayout類,除了繼承來自父類的屬性和方法, TableLayout類中還包含表格布局所特有的屬性和方法。這些屬性和方法說明如表7所示。
表7 TableLayout類常用屬性及對應方法說明
說明:setShrinkAllColumns和setStretchAllColumns實作的功能是将表格中的所有列設定為Shrinkable或Stretchable。
幀布局(FrameLayout)
FrameLayout幀布局在螢幕上開辟出了一塊區域,在這塊區域中可以添加多個子控件,但是所有的子控件都被對齊到螢幕的左上角。幀布局的大小由子控件中尺寸最大的那個子控件來決定。如果子控件一樣大,同一時刻隻能看到最上面的子控件。
FrameLayout繼承自ViewGroup,除了繼承自父類的屬性和方法,FrameLayout類中包含了自己特有的屬性和方法,如表8所示。
表8 FrameLayout屬性及對應方法
提示:在FrameLayout中,子控件是通過棧來繪制的,是以後添加的子控件會被繪制在上層。
絕對布局
絕對定位AbsoluteLayout,又可以叫做坐标布局,可以直接指定子元素的絕對位置,這種布局簡單直接,直覺性強,但是由于手機螢幕尺寸差别比較大,使用絕對定位的适應性會比較差。
簡單的一個布局
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="cn.com.buildwin.activities.PreviewActivity">
android:layout_width="match_parent"
android:layout_height="match_parent">
android:id="@+id/video_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#000000"
android:layout_gravity="center" />
android:id="@+id/progressBar"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"/>
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true">
android:id="@+id/take_picture_button"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="拍照"/>
舉報/回報