Android-0.Android Studio佈局中layout_weight用法
Indicates how much of the extra space in the LinearLayout is allocated to the view associated with these LayoutParams. Specify 0 if the view should not be stretched. Otherwise the extra pixels will be pro-rated among all views whose weight is greater than 0.
指示LinearLayout中多少額外空間分配給與這些LayoutParams關聯的檢視。 如果檢視不應被拉伸,請指定0。 否則,額外空間將在權重大於0的所有檢視中按比例分配。
上面有幾點:
1.額外空間,指的是剩餘空閒空間, 額外空間將在權重大於0的所有檢視中按比例分配。
如下,總權重為1+1=2
第一個控制元件是比第二個控制元件佔的空間小的,即w(12345)+1/2空閒空間< w(123456)+1/2控制元件
<LinearLayout android:orientation="horizontal"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_height" android:layout_weight="1" android:text="12345"/> <TextView android:layout_width="wrap_content" android:layout_height="wrap_height" android:layout_weight="1" android:text="123456"/> </LinearLayout>
如果我們讓控制元件的寬度定義為layout_width="0dp" ,這樣比如2個控制元件的 layout_weight="1" 就可以各自50%平分整個空間了,因為:0 + 1/2空閒空間 = 0 + 1/2空閒空間。
2.預設layout_weight為0,所以如果這麼寫:
<LinearLayout android:orientation="horizontal"> <TextView android:layout_width="40dp" android:layout_height="match_parent" android:background="#000" /> <Button android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1"/> <TextView android:layout_width="40dp" android:layout_height="match_parent" android:background="#888" /> </LinearLayout>
則總權重為1,即Button佔了所有剩餘空閒空間,無論它在哪個位置
3.在排列方向上設定了match_parent, 如下,權重為2,1,2
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal">
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="1"
android:layout_weight="2"/>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="2"
android:layout_weight="1"/>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="3"
android:layout_weight="2"/>
執行結果如下:
分析:因為設定的都是match_parent,所以如果沒有設定權重,三個Button只會顯示第一個,其他會被覆蓋,但是設定了權重後, 我們就按三個Button給定的width=match_parent計算剩餘空間
剩餘空間=1個match_parent空間-3個match_parent空間= -2個match_parent空間(負2)
所以
Button1所佔空間 = 1個match_parent空間+(-2個match_parent空間)*2/5 = 1/5個match_parent空間
Button2所佔空間 = 1個match_parent空間+(-2個match_parent空間)*1/5 = 3/5個match_parent空間
Button3所佔空間 = 1個match_parent空間+(-2個match_parent空間)*2/5 = 1/5個match_parent空間
所以在統一設定match_parent時,會有這麼一個特性,權重越大,空間越小。
而且在某個控制元件權重剛好為另外的所有控制元件權重之和時,這個控制元件會消失。
如權重變為1,2,3
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal">
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="1"
android:layout_weight="2"/>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="2"
android:layout_weight="1"/>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="3"
android:layout_weight="2"/>
執行結果如下:
同樣的演算法:
Button1所佔空間 = 1個match_parent空間+(-2個match_parent空間)*1/6 = 2/3個match_parent空間
Button2所佔空間 = 1個match_parent空間+(-2個match_parent空間)*2/6 = 1/3個match_parent空間
Button3所佔空間 = 1個match_parent空間+(-2個match_parent空間)*3/6 = 0個match_parent空間
剩餘佈局大小 = 父佈局大小 - 子佈局大小之和