面试中关于 layout_weight 笔记
最后更新于:2022-04-01 19:52:11
视频链接 : http://www.imooc.com/video/10165
1.看第一个例子,当我们按比例放置多个TextView时,在没有添加内容或者内容没有超过分配的宽度时,这些TextView会很正常的显示在屏幕上,但是当某一个TextView 的内容宽度多于分配的宽度时, 就会 出现 如下情况。
~~~
~~~
![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-02-23_56cbd2db5f8e0.jpg)
出现这种情况是因为 他们的对齐当时是根据父控件的基线进行对齐的,很明显的可以看到123..... 和 2 ,3 的下边界是在一条线上的。解决这种问题 只要这 上面代码的LinearLayout 中添加如下代码就可以了。android:baselineAligned="false"
![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-02-23_56cbd2db7d1ba.jpg)
2.当我们把上面代码 的第一个TextView 改成 wrap_content 之后 ,我们会发现 第一个TextView 原本只占1/6宽度的,现在却占了一半左右的宽度。这是为什么呢?
![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-02-23_56cbd2db92d92.jpg)
这是因为在分配宽度的时候 ,首先会给每个TextView分配他们自己layout_width 值的宽度,然后将剩下的按照比列依次加给3个控件。
3.然后我们把3个TextView的宽度全部改成 match_parent,然后我们发现屏幕上只有第一、二个TextView了,第三个不见了。这又是为什么呢?
![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-02-23_56cbd2dbb0870.jpg)
原因和第2点一样,首先给每个TextView分配 match_parent的宽度,然后再把剩下的宽度加到每个控件上。我们假设屏幕宽度为480, 第一次分配的宽度为 480 * 3; 然后 用屏幕宽度 减去 第一次分配的宽度,也就是480-480*3 得到的是 -960, 然后把 -960 分成6份.
1/6 加到第一个TextView上: 480 +(-960 /6) = 320;
2/6 加到第一个TextView上: 480 +(-960 /6)* 2 = 160;
3/6 加到第一个TextView上: 480 +(-960 /6)* 3 = 0;
第三个TextView为0,所以不显示。
4.当我们想在LinearLayout中让一个TextView 占一半屏幕宽度的时候,我们可以这样做:让TextView的layout_weight值为1,或者其他你喜欢的,然后在父控件LinearLayout中声明 **android****:weightSum=****"2"**或者自己定义值得2倍就OK了!效果如下。
![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-02-23_56cbd2dbcd919.jpg)
5.对于以 layout_XXX,这样格式的属性设置,这些属性是交给父控件去分配的 ,像layout_width、layout_height等,像layout_gravity="center",就是 将该控件置于父控件的中心位置。而那些没有以layout_开始的属性则是控件自身控制和分配的。
';