1. 程式人生 > >學Android---佈局(一)LinearLayout

學Android---佈局(一)LinearLayout

更博不能停,今天講佈局~~~

1、LinearLayout:
線性佈局,是Android五大布局中出鏡率最高的佈局。我個人理解為線性佈局即是給它的子控制元件新增一些條條框框的約束,使這些子控制元件能整整齊齊規規矩矩地擺放在佈局中。

2、LinearLayout常用屬性:
在新增一個LinearLayout時,通常會設定它的一些常用屬性,這些屬性是對它所包含的所有子類控制元件進行位置安排。
例如,

    android:gravity="center_horizontal"
    //gravity指的是在LinearLayout這個父類容器中的子控制元件的擺放方式
    //常用的屬性值有:
//center_vertical:垂直y軸居中 //center_horizontal:水平居中 //center:水平垂直都居中 //right:子類控制元件位於當前佈局的右邊 //left:子類控制元件位於當前佈局的左邊 //bottom:子類控制元件位於當前佈局的下面 //也可使用“|”來同時使用gravity中的兩個屬性 //如android:gravity="right|bottom"表示子類控制元件位於當前佈局的右下方
    android:orientation="vertical"
    //orientation表示子類控制元件在LinearLayout中的排列方式
//屬性值分為vertical---垂直排布 //和horizontal---水平排布

3、在LinearLayout中子類控制元件的常用屬性:
例如:

android:layout_gravity="bottom"
//這裡的layout_gravity一定要和gravity時區分開,記得我剛開始學佈局的
//時候對gravity和layout_gravity暈了好久,後來進行了系統的比較才終於
//分清楚。本文最後總結會給出二者的比較區別
//layout_gravity指的是子類控制元件在父類容器中的一個位置
//其他常用屬性值同上

另一個常用屬性是layout_weight

android:
layout_weight="1"

這個屬性講起來有點抽象,簡單的說就是當前控制元件佔父類容器的一個比例
舉個栗子:
我在LinearLayout中添加了3個Button,如下圖所示
這裡寫圖片描述
xml檔案如下:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal"
    tools:context=".MainActivity" >

    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Button1"/>

    <Button
        android:id="@+id/button2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Button2" />

    <Button
        android:id="@+id/button3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Button3" />

</LinearLayout>

可以看到LinearLayout的寬是填滿螢幕,但是3個button並沒有填滿LinearLayout。
然後現在我在button3中新增一句android:layout_weight=”1”
效果就會變成如下:
這裡寫圖片描述
可以看到,之前LinearLayout中剩餘的空間被button3填滿了,這就是因為layout_weight屬性。

4、gravity與layout_gravity:
最後再來說一說這兩個長得很像的屬性,它們的關係應該是用父子來形容,而不是兄弟。
gravity是給父類容器用的,而layout_gravity是給子類控制元件用的。
舉個栗子(可能不太恰當):
在一個教室裡,老師規定:學生們只能坐在教室的中間,不能坐過道兩邊。那麼就可以理解為這個老師設定了一個gravity屬性來約束學生。然後這些學生裡有一個比較有想法的,他選擇了最靠近過道的位置,雖然被約束了,但是他可以在這個範圍內選一個自己喜歡的位置呀,所以他給自己設定了一個layout_gravity。
這就是二者的區別,其實多用幾次這些屬性,自然就能明白其中的差別了~