在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 ;
原因:
- 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 , 同样会有问题!