寫了一個(gè)小Demo遇到了android:layout_weight了解了一下原理闲坎。 具體分配剩余空間為什么這樣算我也不清楚吝岭!
<LinearLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:orientation="horizontal">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:background="#77bc1f"
android:text="AAA"
android:textColor="#fff"
android:textSize="23sp" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="2"
android:background="#06d992"
android:text="BBB"
android:textColor="#fff"
android:textSize="23sp" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="3"
android:background="#EEA32E"
android:text="CCC"
android:textColor="#fff"
android:textSize="23sp" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:orientation="horizontal">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:background="#77bc1f"
android:text="AAA"
android:textColor="#fff"
android:textSize="23sp" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="2"
android:background="#06d992"
android:text="BBB"
android:textColor="#fff"
android:textSize="23sp" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="3"
android:background="#EEA32E"
android:text="CCC"
android:textColor="#fff"
android:textSize="23sp" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:orientation="horizontal">
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:background="#77bc1f"
android:text="AAA"
android:textColor="#fff"
android:textSize="23sp" />
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="2"
android:background="#06d992"
android:text="BBB"
android:textColor="#fff"
android:textSize="23sp" />
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="3"
android:background="#EEA32E"
android:text="CCC"
android:textColor="#fff"
android:textSize="23sp" />
</LinearLayout>
</LinearLayout>
這段代碼實(shí)現(xiàn)的UI效果如下:
整個(gè)布局是個(gè)垂直的LinearLayout,里面有三個(gè)水平方向的LinearLayout威蕉,內(nèi)部放置了三個(gè)TextView刁俭,三個(gè)TextView高度為wrap_content;其內(nèi)容和背景色也不同(這里只是為了看起來方便)韧涨,重點(diǎn)是其寬度:
第一行內(nèi)三個(gè)TextView
layout_width="wrap_content"
第二行內(nèi)三個(gè)TextView
android:layout_width="match_parent"
第三行內(nèi)三個(gè)TextView
android:layout_width="0dp"
而每一個(gè)LinearLayout內(nèi)部三個(gè)TextView的layout_weight分別1牍戚,2,3虑粥。由此如孝,看見由于其wrap_content的不同,使其layout_weight的分配受到了影響娩贷。這里就來分析一下第晰,按照之前所說,layout_weight會(huì)按屏幕剩余空間彬祖,按權(quán)重分配空間茁瘦。
第一種情況(第一個(gè)LinearLayout)
系統(tǒng)先給3個(gè)TextView分配他們的寬度值wrap_content(寬度足以包含他們的內(nèi)容1,2,3即可),然后會(huì)把剩下來的屏幕空間按照1:2:3的比列分配給3個(gè)textview储笑,
上面的UI 比重為 :
61/6 甜熔,62/6,6*3/6 即1:2:3 突倍,如UI 第一行呈現(xiàn)的那樣腔稀。
第二種情況(第二個(gè)LinearLayout)
系統(tǒng)先給3個(gè)textview分配他們所要的寬度match_parent盆昙,也就是說每一都是填滿他的父控件,這里就是屏幕的寬度.
那么這時(shí)候的剩余空間=1個(gè)parent_width-3個(gè)parent_width=-2個(gè)parent_width (parent_width指的是屏幕寬度 )
那么第一個(gè)TextView的實(shí)際所占寬度應(yīng)該=match_parent的寬度,
即parent_width + 他所占剩余空間的權(quán)重比列1/6 * 剩余空間大泻嘎病(-2 parent_width)=2/3parent_width
同理第二個(gè)TextView的實(shí)際所占寬度=parent_width + 2/6*(-2parent_width)=1/3parent_width;
第三個(gè)TextView的實(shí)際所占寬度=parent_width + 3/6*(-2parent_width)=0parent_width弱左;所以就是2:1:0的比列顯示了。
即如UI第二行呈現(xiàn)的那樣炕淮。
第二種的另一個(gè)解釋:
第二種情況具體分析如下:
假設(shè)屏幕寬度為1拆火。那么三個(gè)控件占據(jù)后的剩余空間就是 1-1*3=-2;
然后將剩余的-2寬度屏幕控件按照 1:2:3 的比例分給三個(gè)控件涂圆。
A: -2*(1/6)=-1/3 们镜; 然后原來分配給控件的寬度為1;1+(-1/3)=2/3润歉;故實(shí)際寬度為2/3
B: -2*(2/6)=-2/3 模狭;同上,1+(-2/3)=1/3踩衩;故實(shí)際寬度為1/3
C: -2*(3/6)=-1嚼鹉;同上,1+(-1)=0;故實(shí)際寬度為0
整理自:http://www.reibang.com/p/ddc9253be59f 及其評(píng)論內(nèi)容