布局中若想某几个控件在水平方向以某种比例显示,可做如下操作:
以三个Textview为例子,想要宽度是1:2:2:
分别设置:layout_width="0db",layout_weight=1;、
layout_width="0db",layout_weight=2;
layout_width="0db",layout_weight=2;
会遇到的问题:
(1)若第一个TextView因为宽度不够,分行显示了,结果发现该Textview与另两个没有对齐,该如何对齐?
注意下可以发现他的第一行还是与其他两个Textview是对齐的,原因是Textview会参考父类的baseline(基线),因此解决以上问题的方法是:
设置LinearLayout的layout_Aligned=“fasle"
(2)假设将第一个Textview的layout_width=wrap_content,会不会影响layout_weight?
修改后可以看到三个textview没有按周1:2:2布局,看来的确是影响到了。
这反映了如下问题:
LinearLayout的Layout_weight属性,首先按照控件申明的尺寸进行分配,然后再将剩下的尺寸按照weight分配
(3)将三个textview的宽度都设为match_parent,会如何显示?
可以看到:Textview比例为1的控件所占的比例反而更大了,原因是;
LinearLayout的Layout_weight属性,首先按照控件申明的尺寸进行分配,然后再将剩下的尺寸按照weight分配
三个控件申明宽度一样,计算过程如下:
假设手机屏宽480dp:
申明的尺寸为480(match_parent),剩下的尺寸为:480-3*480= -2*480;
第一个textview宽度:480+(-2*480)*1/5=288;
第二,三均为: 480+(-2*480)*2/5=96;
可以看出第一个TEXTVIEWwidth值更大
结论:控件宽度=申明的尺寸+父控件剩余尺寸*比例
(4)若一行只有一个控件,如何能占整个宽度的一半?
控件申明:layout_width="0db",layout_weight=1;
LinearLayout申明:weightSum="2";
以上几点对于高度也适用。
另外:带有layout_开头的属性都是交给父容器,没有layout_开头的都是本身的属性