我不明白如何使用這個屬性。 誰能告訴我更多關於它的事情? android
添加到其餘答案,使這個工做最重要的是將佈局寬度(或高度)設置爲0px 佈局
android:layout_width="0px"
不然你會看到垃圾 性能
結合兩個答案 spa
Flo&rptwsthi和roetzi, code
請記住更改layout_width=0dp/px
,不然layout_weight
行爲將反向行動,最大數量佔用最小空間,最小數量佔用最大空間。 xml
此外,一些權重組合會致使一些佈局沒法顯示(由於它佔據了空間)。 utf-8
要當心這一點。 get
顧名思義,佈局權重指定特定字段或窗口小部件佔據屏幕空間的空間量或百分比。
若是咱們在水平方向指定權重,那麼咱們必須指定layout_width = 0px
。
一樣,若是咱們在垂直方向指定權重,那麼咱們必須指定layout_height = 0px
。 數學
layout_weight
告訴Android如何在LinearLayout
分發您的View
。 Android而後首先計算全部具備指定權重的View
所需的總比例,並根據所需的屏幕分數放置每一個View
。 在下面的示例中,Android看到TextView
的layout_weight
爲0
(這是默認值), EditText
的layout_weight
爲2
,而Button
的權重爲1
。 所以Android分配「剛夠」的空間來顯示tvUsername
和tvPassword
而後將所述屏幕寬度的剩餘部分分紅5個等份,其中的兩個被分配給etUsername
,兩到etPassword
和最後部分bLogin
: it
<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>
看起來像:
和
若是有多個視圖跨越LinearLayout
,則layout_weight
會爲每一個視圖提供一個比例大小。 具備更大layout_weight
值的視圖「更重」,所以它得到更大的空間。
這是一個讓事情更清晰的圖像。
術語佈局權重與數學中加權平均的概念有關。 就像在大學課堂上,做業價值30%,出勤率10%,期中價值20%,決賽價值40%。 這些部分的分數在加權後會給出總分。
佈局重量也是同樣的。 水平LinearLayout
的Views
能夠佔據總寬度的必定百分比。 (或垂直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>