帧布局FrameLayout在Android的五大布局中是最简单的布局方式,在需要布局中的控件有重叠的情况下才使用。


  今天Shamoo使用FrameLayout的时候,发现布局里面的控件设置layout_margin类的属性没有效果。后来百度一下才知道FrameLayout中的控件layout_margin设置要依赖layout_gravity属性,否则layout_margin设置无效。


  layout_gravity有好几个值可以设置,具体要设置哪一个呢?其实layout_gravity可以理解为设置控件的参考点,控件最终显示位置最终由layout_gravity和layout_margin共同决定。


  如果想要控件正常显示,可以将控件的layout_gravity设置为top,以屏幕左上角为参考点。



1. <FrameLayout
2. android:layout_width="fill_parent"
3. android:layout_height="fill_parent">
4. <!-- layout_gravity设置为top,以屏幕左上角为参考点 -->
5. <TextView
6. android:layout_width="100dp"
7. android:layout_height="100dp"
8. android:layout_gravity="top"
9. android:background="#FF0000"
10. android:gravity="center"
11. android:text="1"
12. android:textSize="30sp" />
13. <TextView
14. android:layout_marginLeft="80dp"
15. android:layout_marginTop="80dp"
16. android:layout_width="100dp"
17. android:layout_height="100dp"
18. android:layout_gravity="top"
19. android:background="#00FF00"
20. android:gravity="center"
21. android:text="2"
22. android:textSize="30sp" />
23. <TextView
24. android:layout_marginLeft="160dp"
25. android:layout_marginTop="160dp"
26. android:layout_width="100dp"
27. android:layout_height="100dp"
28. android:layout_gravity="top"
29. android:background="#0000FF"
30. android:gravity="center"
31. android:text="3"
32. android:textSize="30sp" />
33. </FrameLayout>


Android的FrameLayout使用要注意的问题_控件


  改变所有的控件的参考点,layout_gravity设置为center,看看效果

Android的FrameLayout使用要注意的问题_控件_02


  另外FrameLayout在一些控件动画中和一些复杂的UI设计大有用处,还是挺不错的。