这几天刚学完了 L1 的 linearlayout 的课程,鉴于SJ课程笔记内容重分享,轻重复,所以我的笔记尽量不去重复课程的内容,而是探讨为主。
这次课程主要令我疑惑的正像是帖子题目中所说,为什么在设置 weight 之后,相应的 width 和 height 要设置为 0dp 呢?视频课程中像是介绍自然规律般的语气,直接了当的就说到要设置成0dp,那如果不设置成0dp,是不是不行呢?我的实验如下:
一、我偏不设置成0dp
从上图可以看到,layout_height 值设置成 wrap_content 完全对显示效果没有影响。然后我又实验了放三张图会怎么样。
结果更令人疑惑,还是没有影响,那设置成0dp意义为何?
二、Google怎么说?
要追求答案最终的方法还是 google 一下,所以 google 了一下,果然不是只有我一个人有这个疑惑啊,排名第一次的答案这样说道:他在 linearlayout 横向布局多张图片的时候,将 width 设置成 wrap_content 导致个别图片在权重相同的情况下,分配不均,类似下图:
但是显然在在线布局工具中并不存在这个问题,所以我不得不在 Android studio 中尝试一下,结果如下:
然而,纵向效果下,并没有什么问题
再尝试了一下横向效果,仍然没有重现问题。
现在我能想到的唯一可能性就是,通过版本更新,这个显示分配不均的问题已经修复了?
三、可能是比较合理的答案
正当我以为这个疑惑暂时可能无法解释的时候,我看到了google排在第二位的结果,正是来自于视频课程中介绍的网站:stackoverflow,同样的已经有人问过同样的问题,“In android layouts what is the effect/meaning of layout_height=“0dip””,这个问题有3个回答,其中最多的有29个赞的回答说到,当使用 weight 控制宽、高的时候,width 和 height 可以填入任意的值,但是“0dp”,会让你的“intention”更加明确,老实说,当看到这个 intention 的时候,我懵逼了好一会,还好,后面有人补充回答,大意是说,0dp主要作用是在初始化阶段只需要调整界面布局一次,而当设置成其他值的时候,界面需要调整两次,所以有设置权重的情况下,weight 或者hight 设置成0dp 可以节省更多的运行资源。
这是我目前找到的,还算比较合理的答案,不知道论坛的大家有什么别的答案嘛?
网友评论