FrameLayout 的 margin 在 2.x 上不生效

来源:互联网 发布:excel大批量数据查找 编辑:程序博客网 时间:2024/05/21 00:55

在2.2 2.3版本上使用FrameLayout时,如果child要设置margin属性,切记要给layoutParams设置 gravity属性。
lp.gravity = Gravity.LEFT | Gravity.TOP, 这样的margin才能够生效。

解决方案:
给 childView 的 LayoutParams 主动设置一个 gravity 属性
lp.gravity = Gravity.LEFT | Gravity.TOP ;

原因:

  1. Framelayout的 layoutParams 里的 gravity 属性默认为 -1
    这里写图片描述

下面这块是2.3的源码
可以看到,在 gravity 没有设置的时候,布局的时候是不会处理 margin 属性的
这里写图片描述

而 4.x + 就没有问题了
下面这块是 4.2 的代码:
这里写图片描述

这里写图片描述
可以看到,4.x 后修复了这个问题,在没有设置 gravity 的时候给一个默认值,后面的 layout 过程就能正确处理 margin了~

所以
1. 使用 FrameLayout 的时候记得给 child 加 gravity 属性,确保 2.x 上表现正常
2. ScrollView 继承自 FrameLayout , 同样会有问题!

0 0
原创粉丝点击