天天看點

Android 布局元件

  布局用于定義activity中ui元素的排列結構,android提供了linearlayout線性布局、relativelayout相對布局 、framelayout幀布局 、tablelayout表格布局、absolutelayout坐标布局 共五種布局,可以通過兩種方式聲明布局:

• 在 xml 中聲明 ui 元素。android 提供了對應于 view 類及其子類的xml 元素

• 運作時執行個體化布局元素。可以通過程式設計建立 view 對象和 viewgroup 對象(并操縱其屬性)。

  在 xml 中聲明 ui 的優點在于,可以更好地将應用的外觀與控制應用行為的代碼隔離。ui 描述位于應用代碼外部,這意味着在修改或調整描述時無需修改您的源代碼并重新編譯。例如,可以建立适用于不同螢幕方向、不同裝置螢幕尺寸和不同語言的 xml 布局。此外,在 xml 中聲明布局還能更輕松地顯示 ui 的結構,進而簡化問題調試過程。是以,android應用中普遍采用在xml中布局ui元素。

布局檔案都必須隻包含一個根元素,并且該元素必須是視圖對象或 viewgroup 對象。定義根元素之後,即可再以子元素的形式添加其他布局對象或ui元素,進而逐漸建構定義布局的視圖層次結構

程式清單2.3-1布局檔案的定義

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

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

              android:layout_width="match_parent"

              android:layout_height="match_parent"

              android:orientation="vertical" >

<textview android:id="@+id/text"

              android:layout_width="wrap_content"

              android:layout_height="wrap_content"

              android:text="hello, i am a textview" />

<button android:id="@+id/button"

            android:layout_width="wrap_content"

            android:layout_height="wrap_content"

            android:text="hello, i am a button" />

</linearlayout>

在 xml 中聲明布局後,請在您的 android 項目 res/layout/ 目錄中以 .xml 擴充名儲存檔案,以便其能夠正确編譯。

當編譯應用時,每個 xml 布局檔案都會編譯到一個 view 資源中。應該在 activity.oncreate() 回調方法中使用應用代碼加載布局資源。通過調用 setcontentview(),以 r.layout.layout_file_name 形式向其傳遞對布局資源的引用來執行此操作。

程式清單2.3-2布局檔案的定義

public void oncreate(bundle savedinstancestate) {

    super.oncreate(savedinstancestate);

    setcontentview(r.layout.main_layout);

}

3.線性布局

線性布局常用屬性

xml屬性

備注

android:orientation

horizontal

vertical

決定橫向排列,還是縱向排列

android:layout_weight

int

将父布局中剩餘的尺寸按各兄弟元素的weight值比例進行配置設定,與“wrap_content”配合使用

android:layout_margin

dp

設定對象邊緣與父布局的邊緣之間的空白

android:padding

設定自身内部元素距離自身邊緣的距離

android:background

color/drawable

設定整個布局畫面的背景

android:gravity

top,bottom,left,right,center

元素在自身所屬區域内的對齊方式

android:layout_gravity

元素在布局中的對齊方式

練習:利用線性布局實作下圖所示效果。

Android 布局元件

代碼如下:

4.framelayout布局

練習:完成如下圖所示效果

Android 布局元件

代碼:

5.相對布局relativelayout

  一種非常靈活的布局方式,通過指定界面元素與其他元素的相對位置關系,确定界面中所有元素的布局位置。特點:能夠最大程度保證在各種螢幕類型的手機上正确顯示界面布局表.

  相對布局屬性比較多,為了便于了解和記憶通常我們把屬性分為三類:

第一類:屬性值為true或false

relativelayout的常用屬性

android:layout_centerhrizontal

水準居中

android:layout_centervertical

垂直居中

android:layout_centerinparent

相對于父元素完全居中

android:layout_alignparentbottom

貼緊父元素的下邊緣

android:layout_alignparentleft

貼緊父元素的左邊緣

android:layout_alignparentright

貼緊父元素的右邊緣

android:layout_alignparenttop

貼緊父元素的上邊緣

第二類:屬性值必須為id的引用名“@id/id-name”,

android:layout_below

在某元素的下方

android:layout_above

在某元素的的上方

android:layout_toleftof

在某元素的左邊

android:layout_torightof

在某元素的右邊

android:layout_aligntop

本元素的上邊緣和某元素的的上邊緣對齊

android:layout_alignleft

本元素的左邊緣和某元素的的左邊緣對齊

android:layout_alignbottom

本元素的下邊緣和某元素的的下邊緣對齊

第三類:屬性值為具體的像素值,主要是調整ui元素之間的間距,如表2.3-5所示

表2.3-5relativelayout的常用屬性

android:layout_marginbottom

離某元素底邊緣的距離

android:layout_marginleft

離某元素左邊緣的距離

android:layout_marginright

離某元素右邊緣的距離

android:layout_margintop

離某元素上邊緣的距離

離某元素右邊緣的距離 

Android 布局元件

6.表格布局tablelayout

  tablelayout以行和列的形式對控件進行管理,每一行為一個tablerow對象,或一個view控件。當tablerow對象時,可在tablerow下添加子控件,預設情況下,每個子控件占據一列。有多少個子控件就有多少列;當為view時,該view将獨占一行。

tablelayout的常用屬性

android:layout_colum

指定該單元格在第幾列顯示

android:layout_span

指定該單元格占據的列數(未指定時,為1)

android:stretchcolumns

設定可伸展的列。該列可向行方向伸展,最多可占據一整行

android:shrinkcolumns

設定可收縮的列。當該列子控件的内容太多,已經擠滿所在行,那麼該子控件的内容将往列方向顯示

練習:完成今日頭條界面。

                      需要完成效果                                   已完成效果

Android 布局元件
Android 布局元件

7.絕對布局absolutelayout

  absolutelayout是根據元素指定的x/y坐标值在螢幕上進行顯示的布局。容器的坐标系是以左上角為(0, 0)點,當垂直向下為y軸和水準向右為x軸。absolutelayout 沒有頁邊框,允許元素之間互相重疊。

因為需要為元素固定坐标點,使界面代碼太過剛性,以導緻在不同的裝置上相容性差,開發中我們通常不推薦使用 absolutelayout ,隻需簡單了解即可。

7.gridlayoutbu布局

  gridlayout布局使用虛細線将布局劃分為行、列和單元格,也支援一個控件在行、列上都有交錯排列。而gridlayout使用的其實是跟linearlayout類似的api,隻不過是修改了一下相關的标簽而已。gridlayout的布局政策簡單分為以下三個部分:

  首先它與linearlayout布局一樣,也分為水準和垂直兩種方式,預設是水準布局,一個控件挨着一個控件從左到右依次排列,但是通過指定android:columncount設定列數的屬性後,控件會自動換行進行排列。另一方面,對于gridlayout布局中的子控件,預設按照wrap_content的方式設定其顯示,這隻需要在gridlayout布局中顯式聲明即可。

       其次,若要指定某控件顯示在固定的行或列,隻需設定該子控件的android:layout_row和android:layout_column屬性即可,但是需要注意:android:layout_row=”0”表示從第一行開始,android:layout_column=”0”表示從第一列開始,這與程式設計語言中一維數組的指派情況類似。

  最後,如果需要設定某控件跨越多行或多列,隻需将該子控件的android:layout_rowspan或者layout_columnspan屬性設定為數值,再設定其layout_gravity屬性為fill即可,前一個設定表明該控件跨越的行數或列數,後一個設定表明該控件填滿所跨越的整行或整列。

                需要完成效果                                               已完成效果

Android 布局元件
Android 布局元件

  

繼續閱讀