例如:
<?xml version="1.0" encoding="utf-8"?>
xmlns:android=""
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="#00ff00"
android:weightsum="0"
android:orientation="horizontal" >
android:id="@+id/imageviewloginstate"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="1"
android:text="1" >
button>
android:id="@+id/imageviewloginstate1"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="1"
android:text="2" >
button>
android:id="@+id/imageviewloginstate2"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="2"
android:text="3" >
button>
linearlayout>
假設container即linearlayout的寬度為parent_width
三個按鈕的寬度都是fill_parent,所以在應用layout_weight之前,三個按鈕的寬度都為parent_width
所以額外空間: delta = parent_width - 3 * parent_width = -2 * parent
因為linearlayout沒有設定android:weightsum(預設為0,設定為0就當沒設定吧),所以 mweightsum = 1 + 1 +2 =4
所以:第乙個按鈕的寬度為:
parent_width + share = parent_width + (layout_weight * delta / mweightsum)
= parent_width + (1 * (-2 * parent_width) /4) = 1 /2 *parent_width
然後更新weightsum與delta:
weightsum -= childextra;(=3)
delta -= share;(=-3/2 * parent_width)
第二個按鈕的寬度為:arent_width + share = parent_width + (layout_weight * delta / mweightsum)
= parent_width + (1 * (-3 / 2 * parent_width) /3) = 1 /2 *parent_width
更新weightsum與delta:
weightsum -= childextra;(=2)
delta -= share;(=-parent_width)
第三個按鈕的寬度為:
parent_width + share = parent_width + (layout_weight * delta / mweightsum) = parent_width + (2 * (- parent_width) /2) = 0
所以最終的而已就是前兩個按鈕平分linearlayout,第三個按鈕消失了.
舉例:
<?xml version="1.0" encoding="utf-8"?>
xmlns:android=""
android:layout_width="100dp"
android:layout_height="wrap_content"
android:background="#00ff00"
android:orientation="horizontal" >
android:id="@+id/button1"
android:layout_width="60dp"
android:layout_height="fill_parent"
android:layout_weight="1"
android:text="1" >
button>
android:id="@+id/button2"
android:layout_width="60dp"
android:layout_height="fill_parent"
android:layout_weight="1"
android:text="2" >
button>
android:id="@+id/button3"
android:layout_width="60dp"
android:layout_height="fill_parent"
android:layout_weight="2"
android:text="3" >
button>
linearlayout>
額外空間:delta = 100- 3 * 60 = -80
mweightsum = 1 + 1 +2 =4
所以:
第乙個按鈕的寬度為:60+ share = 60 + (layout_weight * delta / mweightsum) = 60 + (1 * (-80) /4) = 40
然後:weightsum -= childextra;(=3)
delta -= share;(=-60)
第二個按鈕的寬度為:0 + share = 60 + (layout_weight * delta / mweightsum) = 60 + (2 * (-60) /3)= 40
然後:weightsum -= childextra;(=2)
delta -= share;(=-40)
第三個按鈕的寬度為:
60 + share = 60 + (layout_weight * delta / mweightsum)
= 60 + (2 * (-40) /2)
= 20
例外:
<?xml version="1.0" encoding="utf-8"?>
xmlns:android=""
android:layout_width="200dp"
android:layout_height="wrap_content"
android:background="#00ff00"
android:orientation="horizontal" >
android:id="@+id/button1"
android:layout_width="60dp"
android:layout_height="fill_parent"
android:layout_weight="1"
android:text="1" >
button>
android:id="@+id/button2"
android:layout_width="40dp"
android:layout_height="fill_parent"
android:layout_weight="1"
android:text="2" >
button>
linearlayout>
額外空間為100,所以button1的寬度為60+100/2=110,button2的寬度為40+100/2=90。
參考:
android 中layout weight的作用
layout weight 用於給乙個線性布局中的諸多檢視的重要度賦值。所有的檢視都有乙個layout weight值,預設為零,意思是需要顯示多大的檢視就佔據多大的螢幕空 間。若賦乙個高於零的值,則將父檢視中的可 用空間分割,分割大小具體取決於每乙個檢視layout weight 值以及該值在當前...
Android中LayoutParams的用法
寧願做過了後悔,也不要錯過了後悔。本講內容 layoutparams的用法 一 layoutparams的認識 從官方文件可知layoutparams繼承於android.view.viewgroup.layoutparams.layoutparams相當於乙個layout的資訊包,它封裝了layo...
android中LayoutInflater的使用
inflater英文意思是膨脹,在android中應該是擴充套件的意思吧。layoutinflater的作用類似於 findviewbyid 不同點是layoutinflater是用來找layout資料夾下的xml布局檔案,並且例項化!而 findviewbyid 是找具體某乙個xml下的具體 wi...