今天使用FrameLayout的时候,发现布局里面的控件设置layout_margin类的属性没有效果。后来百度一下才知道FrameLayout中的控件layout_margin设置要依赖layout_gravity属性,否则layout_margin设置无效。
layout_gravity有好几个值可以设置,具体要设置哪一个呢?其实layout_gravity可以理解为设置控件的参考点,控件最终显示位置最终由layout_gravity和layout_margin共同决定。
如果想要控件正常显示,可以将控件的layout_gravity设置为top,以屏幕左上角为参考点。
1、在xml布局设置margin失效情况
在要设置Margin的View中加入android:layout_gravity="top|left",则Margin失效问题可以顺利解决;
2、在代码中设置margin失效情况
用如下代码进行设置即可解决问题:
- marginParams.setMargins(l,t,r,b);
- LayoutParams layoutParams = new LayoutParams(marginParams);
- layoutParams.gravity = Gravity.TOP|Gravity.LEFT;
- this.setLayoutParams(layoutParams);
解决问题后分析4.0以下之所以Framelayout设置margin失效原因应该是4.0及以上Framelayout的默认的layout_gravity设置好了"top|left"或有类似逻辑,而4.0以下则没有,所以才会失效。