天天看點

Android布局之線性布局

第一節介紹了建立Android項目時預設生成的布局檔案,預設的布局檔案采用的相對布局RelativeLayout,在這個布局中也預設添加了一個TextView控件。本節講的這個LinearLayout線性布局和RelativeLayout相對布局類似,同屬于布局容器,也可以包裹普通UI控件(TextView、Button等)。

線性布局是按照水準或垂直的方式将布局元素(控件或布局)按照順序依次排列,後面的元素将位于前面元素的下方或右方。至于是下方或右方,和布局設定的方向有關,可以通過設定屬性orientation的值為horizontal(水準)或vertical(垂直)來實作。

3.3.1 LinearLayout基礎用法

下面通過一個執行個體來看一下orientation屬性值為vertical時的效果:

<?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:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Hello World!"
        android:textSize="30sp" />

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Hello World!"
        android:textSize="30sp" />
</LinearLayout>
           

添加了一個LinearLayout布局容器并設定其orientation屬性值為vertical,按照上面的解釋,所有的子控件都應該垂直排列,通過Android Studio的預覽功能來看一下效果,如圖3.15所示。

Android布局之線性布局

圖3.15 Android 布局LinearLayout之vertical

可以看出,兩個TextView控件垂直排列,通過TextView的屬性text的屬性值可以看出,前一個TextView在後一個TextView的上方。

下面修改這個布局檔案的orientation屬性值為horizontal,如下:

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

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello01!"
        android:textSize="30sp" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello02!"
        android:textSize="30sp" />
</LinearLayout>
           

通過代碼可以看出,将orientation屬性值設定成了horizontal水準布局,由于是水準布局,是以再設定TextView的寬為match_parent(占據整個寬)就不再合适了,因為這樣會造成控件重疊,是以同時修改兩個TextView的layout_width為wrap_content(包裹内容),再次檢視預覽如圖3.16所示。

Android布局之線性布局

圖3.16 Android 布局LinearLayout之horizontal

可以看出兩個TextView水準顯示,下面的TextView在上面TextView的右邊。注意orientation屬性為Linearlayout的必設屬性。

3.3.2 LinearLayout嵌套

除了單個LinearLayout的使用,也支援LinearLayout的嵌套,下面通過一個執行個體看一下如何通過LinearLayout的嵌套來實作模拟微信的底部Tab:

<?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="70dp"
    android:background="#ffffffff"
    android:orientation="horizontal">

    <LinearLayout
        android:id="@+id/ll_chat"
        android:layout_width="0dp"
        android:layout_height="fill_parent"
        android:layout_weight="1"
        android:gravity="center"
        android:orientation="vertical">

        <ImageView
            android:id="@+id/img_chat"
            android:layout_width="40dp"
            android:layout_height="40dp"
            android:background="#0000"
            android:src="@drawable/chat_yes" />

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="微信"
            android:textColor="#b6b3b3" />
    </LinearLayout>

    <LinearLayout
        android:id="@+id/ll_frd"
        android:layout_width="0dp"
        android:layout_height="fill_parent"
        android:layout_weight="1"
        android:gravity="center"
        android:orientation="vertical">

        <ImageView
            android:id="@+id/img_frd"
            android:layout_width="40dp"
            android:layout_height="40dp"
            android:background="#0000"
            android:src="@drawable/frd_no" />

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="通訊錄"
            android:textColor="#b6b3b3" />
    </LinearLayout>

    <LinearLayout
        android:id="@+id/ll_find"
        android:layout_width="0dp"
        android:layout_height="fill_parent"
        android:layout_weight="1"
        android:gravity="center"
        android:orientation="vertical">

        <ImageView
            android:id="@+id/img_find"
            android:layout_width="40dp"
            android:layout_height="40dp"
            android:background="#0000"
            android:src="@drawable/find_no" />

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="發現"
            android:textColor="#b6b3b3" />
    </LinearLayout>

    <LinearLayout
        android:id="@+id/ll_me"
        android:layout_width="0dp"
        android:layout_height="fill_parent"
        android:layout_weight="1"
        android:gravity="center"
        android:orientation="vertical">

        <ImageView
            android:id="@+id/img_me"
            android:layout_width="40dp"
            android:layout_height="40dp"
            android:background="#0000"
            android:src="@drawable/me_no" />

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="我"
            android:textColor="#b6b3b3" />
    </LinearLayout>
</LinearLayout>
           

通過代碼可以看出一個LinearLayout内部包裝了四個子LinearLayout,外部的LinearLayout采用水準布局(設定了orientation屬性為horizontal),四個子LinearLayout采用了垂直布局(每一個子LinearLayout的屬性orientation都為vertical)。每一個LinearLayout内都添加了一個ImageView(圖檔控件)和一個TextView(文本控件)。

除了上面講過的屬性以外,還有一些屬性沒有介紹,通過表3.2所示來說明它們的用法:

表3.2 LinearLayout屬性

Android布局之線性布局

為父LinearLayout設定了background屬性,其值為 #ffffffff(純白色);為子LinearLayout設定了gravity屬性并設定其值為center,子LinearLayout将居中顯示。設定weight屬性可以平分整個螢幕的寬,這個屬性的用法在後面的章節會詳細介紹;為ImageView添加了src屬性來設定圖檔背景,這個值的形式為“@drawable/圖檔名”;為TextView添加了textColor屬性來設定字型顔色,其值為 #b6b3b3(淺灰色)。

可以通過Android Studio的預覽功能檢視一下效果如圖3.17所示。

Android布局之線性布局

圖3.17 Android 布局LinearLayout執行個體

可以看出,父LinearLayout的背景為純白色,每個子LinearLayout也都是居中顯示并四等分了整個螢幕的寬,每個LinearLayout上方的ImageView控件都添加了不同的圖檔,下方的TextView都設定了不同的文本和相同的文本顔色(淺灰色)。

如果你喜歡作者的文章,還可以購買他的書(京東自營):

Android布局之線性布局

繼續閱讀