Android4.0以下系統FrameLayout佈局的子View設置的Margin常常出現失敗的情況,而同樣的代碼在Android4.0及以上的系統中則沒有問題。相信此時大多數屌絲程序員都氣得很抓狂吧,當初遇到此問題時我也是如此,用百度、谷歌各種搜索都沒有很好的解決問題,最後經過自己的研究終於找到了解決問題的方法。
1、在xml佈局設置margin失效情況
在要設置Margin的View中加入android:layout_gravity="top|left",則Margin失效問題可以順利解決;
2、在代碼中設置margin失效情況
用如下代碼進行設置即可解決問題:
MarginLayoutParams marginParams = new MarginLayoutParams(this.getLayoutParams());
marginParams.height = this.getMeasuredHeight();
marginParams.width = this.getMeasuredWidth();
marginParams.setMargins(l,t,r,b);
LayoutParams layoutParams = new LayoutParams(marginParams);
layoutParams.gravity = Gravity.TOP|Gravity.LEFT;
this.setLayoutParams(layoutParams);
也就是說加入
layoutParams.gravity = Gravity.TOP|Gravity.LEFT;
即可正常解決問題。
解決問題後分析4.0以下之所以Framelayout設置margin失效原因應該是4.0及以上Framelayout的默認的layout_gravity設置好了"top|left"或有類似邏輯,而4.0以下則沒有,所以纔會失效。