android:layout_weight详解 (总结版)


android:layout_weight 此属性与 android:orientation相关, 

如果android:orientation="vertical",则android:layout_weight与android:layout_height有关,如果android:layout_height=''wrap_content",则按正常比例显示且最小比例也是要包含文字的(请详见链接),如果android:layout_height=''fill_parent",则相反比例显示。垂直方向链接



如果android:orientation="horizontal",则android:layout_weight与android:layout_width有关,如果android:layout_width=''wrap_content",则按正常比例显示且最小比例也是要包含文字的(请详见链接),如果android:layout_width=''fill_parent",则相反比例显示。水平方向链接



layout_widget详细说明   详细说名

真正的原因是Layout_width="fill_parent"的原因造成的。依照上面理解我们来分析:

系统先给3个textview分配他们所要的宽度fill_parent,也就是说每一都是填满他的父控件,这里就死屏幕的宽度

那么这时候的剩余空间=1个parent_width-3个parent_width=-2个parent_width (parent_width指的是屏幕宽度 )

那么第一个TextView的实际所占宽度应该=fill_parent的宽度,即parent_width+ 他所占剩余空间的权重比列1/5 * 剩余空间大小(-2parent_width)=3/5parent_width

同理第二个TextView的实际所占宽度=parent_width + 2/5*(-2parent_width)=1/5parent_width;

第三个TextView的实际所占宽度=parent_width + 2/5*(-2parent_width)=1/5parent_width;所以就是3:1:1的比列显示了。

这样你也就会明白为什么当你把三个Layout_weight设置为1、2、3的话,会出现下面的效果了:

 

第三个直接不显示了,为什么呢?一起来按上面方法算一下吧:

系统先给3个textview分配他们所要的宽度fill_parent,也就是说每一都是填满他的父控件,这里就死屏幕的宽度

那么这时候的剩余空间=1个parent_width-3个parent_width=-2个parent_width (parent_width指的是屏幕宽度 )

那么第一个TextView的实际所占宽度应该=fill_parent的宽度,即parent_width+ 他所占剩余空间的权重比列1/6 * 剩余空间大小(-2parent_width)=2/3parent_width

同理第二个TextView的实际所占宽度=parent_width + 2/6*(-2parent_width)=1/3parent_width;

第三个TextView的实际所占宽度=parent_width + 3/6*(-2parent_width)=0parent_width;所以就是2:1:0的比列显示了。第三个就直接没有空间了。

 


你可能感兴趣的:(android,layout)