android中layout weight的理解

2021-07-01 18:13:22 字數 4126 閱讀 9830

例如:

<?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...