天天看點

android 應用界面布局,Android應用界面程式設計--布局管理器

簡介

在介紹Android的布局管理器之前,有必要讓了解Android平台下的控件類。首先要了解的是View類,該類為所有可視化控件的基類,主要提供了控件繪制和事件處理的方法。建立使用者界面所使用的控件都繼承自View,如TextView、Button、CheckBox等。

關于View及其子類的相關屬性,既可以在布局XML檔案中進行設定,也可以通過成員方法在代碼中動态設定。View類常用的屬性及其對應方法如表1所示。

表1 View類常用屬性及對應方法說明

android 應用界面布局,Android應用界面程式設計--布局管理器

說明:任何繼承自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的屬性

android 應用界面布局,Android應用界面程式設計--布局管理器

接下來再來看屬性值為其他控件id的屬性,如表3所示。

表3 相對布局中取值為其他控件id的屬性及說明

android 應用界面布局,Android應用界面程式設計--布局管理器

最後要介紹的是屬性值以像素為機關的屬性及說明,如表4所示。

表4 相對布局中取值為像素的屬性及說明

android 應用界面布局,Android應用界面程式設計--布局管理器

需要注意的是在進行相對布局時要避免出現循環依賴,例如設定相對布局在父容器中的排列方式為WRAP_CONTENT,就不能再将相對布局的子控件設定為ALIGN_PARENT_ BOTTOM。因為這樣會造成子控件和父控件互相依賴和參照的錯誤。

線性布局(LinearLayout)

提供了控件水準或者垂直排列的模型。同時,使用此布局時可以通過設定控件的weight參數控制各個控件在容器中的相對大小。LinearLayout布局的屬性既可以在布局檔案(XML)中設定,也可以通過成員方法進行設定。表5給出了LinearLayout常用的屬性及這些屬性的對應設定方法。

表5 LinearLayout常用屬性及對應設定方法

android 應用界面布局,Android應用界面程式設計--布局管理器

線上性布局中可使用gravity屬性來設定控件的對齊方式,gravity可取的屬性值及說明如表6所示。

提示:當需要為gravity設定多個值時,用“|”分隔即可。

表6 gravity可取的屬性值及說明

android 應用界面布局,Android應用界面程式設計--布局管理器

表格布局(TableLayout)

以行和列的形式管理控件,每行為一個TableRow對象,也可以為一個View對象,當為View對象時,該View對象将跨越該行的所有列。在TableRow中可以添加子控件,每添加一個子控件為一列。

TableLayout繼承自LinearLayout類,除了繼承來自父類的屬性和方法, TableLayout類中還包含表格布局所特有的屬性和方法。這些屬性和方法說明如表7所示。

表7 TableLayout類常用屬性及對應方法說明

android 應用界面布局,Android應用界面程式設計--布局管理器

說明:setShrinkAllColumns和setStretchAllColumns實作的功能是将表格中的所有列設定為Shrinkable或Stretchable。

幀布局(FrameLayout)

FrameLayout幀布局在螢幕上開辟出了一塊區域,在這塊區域中可以添加多個子控件,但是所有的子控件都被對齊到螢幕的左上角。幀布局的大小由子控件中尺寸最大的那個子控件來決定。如果子控件一樣大,同一時刻隻能看到最上面的子控件。

FrameLayout繼承自ViewGroup,除了繼承自父類的屬性和方法,FrameLayout類中包含了自己特有的屬性和方法,如表8所示。

表8 FrameLayout屬性及對應方法

android 應用界面布局,Android應用界面程式設計--布局管理器

提示:在FrameLayout中,子控件是通過棧來繪制的,是以後添加的子控件會被繪制在上層。

絕對布局

絕對定位AbsoluteLayout,又可以叫做坐标布局,可以直接指定子元素的絕對位置,這種布局簡單直接,直覺性強,但是由于手機螢幕尺寸差别比較大,使用絕對定位的适應性會比較差。

簡單的一個布局

android 應用界面布局,Android應用界面程式設計--布局管理器

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="拍照"/>

舉報/回報