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的比列显示了。第三个就直接没有空间了。