你可能不知道的layout_weight

说到layout_weight,大家一般都会说,这还不简单,不就是一个权重吗?

那看到这几行代码,大家觉得UI会是什么样的呢?




    

    

    

结果却是:

为什么色块木有对齐?

真的木有对齐吗?其实第一排的1和2、3对齐了。

你知道吗?这都是LinearLayout的baseline惹的祸。

哈,有点意思吧,继续来,

如果把1的width改成wrap_content呢?

你可能不知道的layout_weight_第1张图片

怎么样?这次你猜对了吗?

效果有点怪,为啥1的宽度比2还大?

揭秘:LinearLayout中的layout_weight属性首先按照控件声明的尺寸进行分配,再将剩下的尺寸按照weight进行分配。

哈,精彩仍在继续,

把1、2、3的width改成match_parent,这里我们另把3的weight改成2,结果呢?


什么鬼,

3个都匹配父控件,宽度显然不够,这时:

假设外层LinearLayout的width为480,按照揭秘:

剩余尺寸rest=480-480*3=-480*2;

故width(1)= 480(match_parent) + (-480*2)*(1/5)= 480*(3/5)

故width(2)=width(3)= 480(match_parent) + (-480*2)*(2/5)= 480*(1/5)

soga,原来如此!

结论:控件宽度 + 父控件剩余宽度*比例

现在不让大家猜了,问大家一个问题,如果在LinearLayout只有一个TextView控件,如何让它只占1/2的宽度?


大家先试一试,然后往下看:




    

妙用LinearLayout的weightSum属性就可以搞定。

最后一个揭秘:很多人傻傻分不清楚layout_gravity和gravity的区别,只要记住layout_开头的都由layout父容器决定,若无则代表本身属性就ok啦。










你可能感兴趣的:(Android开发)