android:layout_weight是什麼意思?

我不明白如何使用這個屬性。 誰能告訴我更多關於它的事情? android


#1樓

添加到其餘答案,使這個工做最重要的是將佈局寬度(或高度)設置爲0px 佈局

android:layout_width="0px"

不然你會看到垃圾 性能


#2樓

結合兩個答案 spa

Flo&rptwsthi和roetzi, code

請記住更改layout_width=0dp/px ,不然layout_weight行爲將反向行動,最大數量佔用最小空間,最小數量佔用最大空間。 xml

此外,一些權重組合會致使一些佈局沒法顯示(由於它佔據了空間)。 utf-8

要當心這一點。 get


#3樓

顧名思義,佈局權重指定特定字段或窗口小部件佔據屏幕空間的空間量或百分比。
若是咱們在水平方向指定權重,那麼咱們必須指定layout_width = 0px
一樣,若是咱們在垂直方向指定權重,那麼咱們必須指定layout_height = 0px數學


#4樓

layout_weight告訴Android如何在LinearLayout分發您的View 。 Android而後首先計算全部具備指定權重的View所需的總比例,並根據所需的屏幕分數放置每一個View 。 在下面的示例中,Android看到TextViewlayout_weight0 (這是默認值), EditTextlayout_weight2 ,而Button的權重爲1 。 所以Android分配「剛夠」的空間來顯示tvUsernametvPassword而後將所述屏幕寬度的剩餘部分分紅5個等份,其中的兩個被分配給etUsername ,兩到etPassword和最後部分bLoginit

<LinearLayout android:orientation="horizontal" ...>

    <TextView android:id="@+id/tvUsername" 
    android:text="Username" 
    android:layout_width="wrap_content" ... />

    <EditText android:id="@+id/etUsername"
    android:layout_width="0dp"
    android:layout_weight="2" ... />

    <TextView android:id="@+id/tvPassword"
    android:text="Password"
    android:layout_width="wrap_content" />

    <EditText android:id="@+id/etPassword"
    android:layout_width="0dp"
    android:layout_weight="2" ... />

    <Button android:id="@+id/bLogin"
    android:layout_width="0dp"
    android:layout_weight="1"
    android:text="Login"... />

</LinearLayout>

看起來像:
景觀取向
縱向


#5樓

若是有多個視圖跨越LinearLayout ,則layout_weight會爲每一個視圖提供一個比例大小。 具備更大layout_weight值的視圖「更重」,所以它得到更大的空間。

這是一個讓事情更清晰的圖像。

在此輸入圖像描述

理論

術語佈局權重與數學中加權平均的概念有關。 就像在大學課堂上,做業價值30%,出勤率10%,期中價值20%,決賽價值40%。 這些部分的分數在加權後會給出總分。

在此輸入圖像描述

佈局重量也是同樣的。 水平LinearLayoutViews能夠佔據總寬度的必定百分比。 (或垂直LinearLayout的高度的百分比。)

佈局

您使用的LinearLayout將以下所示:

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal">

    <!-- list of subviews -->

</LinearLayout>

請注意,必須對LinearLayout使用layout_width="match_parent" 。 若是你使用wrap_content ,那麼它將沒法工做。 另請注意, layout_weight不適用於RelativeLayouts中的視圖(有關此問題的SO答案,請參閱此處此處 )。

觀點

水平LinearLayout每一個視圖都以下所示:

<Button
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:layout_weight="1" />

請注意,您須要將layout_width="0dp"layout_weight="1"一塊兒使用。 忘記這會致使許多新用戶出現問題。 (請參閱此文章 ,瞭解經過不將寬度設置爲0可得到的不一樣結果。)若是您的視圖位於垂直 LinearLayout那麼您固然會使用layout_height="0dp"

在上面的Button示例中,我將權重設置爲1,但您可使用任何數字。 重要的只是總數。 您能夠在我發佈的第一張圖像中的三行按鈕中看到,數字都不一樣,但因爲比例相同,所以每行的加權寬度不會改變。 有些人喜歡使用總和爲1的十進制數,這樣在複雜的佈局中,每一個部分的重量都很清楚。

最後一點說明。 若是您有許多使用layout_weight的嵌套佈局,則可能對性能不利。

額外

如下是頂部圖像的xml佈局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="android:layout_weight="
        android:textSize="24sp" />

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">

        <Button
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="1" />

        <Button
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="2"
            android:text="2" />

        <Button
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="1" />

    </LinearLayout>

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="android:layout_weight="
        android:textSize="24sp" />

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">

        <Button
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="10"
            android:text="10" />

        <Button
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="20"
            android:text="20" />

        <Button
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="10"
            android:text="10" />

    </LinearLayout>

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="android:layout_weight="
        android:textSize="24sp" />

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">

        <Button
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight=".25"
            android:text=".25" />

        <Button
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight=".50"
            android:text=".50" />

        <Button
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight=".25"
            android:text=".25" />

    </LinearLayout>

</LinearLayout>
相關文章
相關標籤/搜索