Android开发之gravity和layout_gravity之间的区别-案例演示

2015-10-23 16:13 阅读 3,757 次 评论 3 条
版权声明:本文著作权归TeachCourse所有,未经许可禁止转载,谢谢支持!
转载请注明出处:http://teachcourse.cn/488.html

摘要:

我经常分不清楚gravitylayout_gravity到底怎么用,所以在布局的时候展示不出想要的效果,今天刚好做了一个案例,趁此弄明白了gravity和layout_gravity的区别。下面先看看效果图:
gravity和layout_gravity区别

在这个案例里,LinearLayout父控件中放置四个TextView,在TextView中使用gravity和layout_gravity设置该TextView的位置,显示的图标使用了drawableTop属性,然后添加图片资源即可,最后达到了上图的效果。

布局资源的源码:

  1. <LinearLayout  
  2. android:layout_width="match_parent"  
  3. android:layout_height="match_parent"  
  4. android:layout_alignParentBottom="true"  
  5. android:layout_alignParentLeft="true"  
  6. android:orientation="horizontal"  
  7. android:gravity="center" >  
  8.   
  9. <TextView  
  10. android:id="@+id/news_tv1"  
  11. android:layout_width="wrap_content"  
  12. android:layout_height="wrap_content"  
  13. android:layout_gravity="bottom"  
  14. android:layout_weight="1"  
  15. android:drawableTop="@drawable/haed_ren_bg"  
  16. android:gravity="center"  
  17. android:singleLine="true"  
  18. android:text="新闻"  
  19. android:textSize="@dimen/list_cat_size" />  
  20.   
  21. <TextView  
  22. android:drawableTop="@drawable/haed_ren_bg"  
  23. android:id="@+id/news_tv2"  
  24. android:layout_width="wrap_content"  
  25. android:layout_height="wrap_content"  
  26. android:layout_gravity="bottom"  
  27. android:gravity="center"  
  28. android:layout_weight="1"  
  29. android:singleLine="true"  
  30. android:text="政务"  
  31. android:textSize="@dimen/list_cat_size" />  
  32.   
  33. <TextView  
  34. android:drawableTop="@drawable/haed_ren_bg"  
  35. android:id="@+id/news_tv3"  
  36. android:layout_width="wrap_content"  
  37. android:layout_height="wrap_content"  
  38. android:layout_gravity="bottom"  
  39. android:gravity="center"  
  40. android:layout_weight="1"  
  41. android:singleLine="true"  
  42. android:text="社区"  
  43. android:textSize="@dimen/list_cat_size" />  
  44.   
  45. <TextView  
  46. android:drawableTop="@drawable/haed_ren_bg"  
  47. android:id="@+id/news_tv4"  
  48. android:layout_width="wrap_content"  
  49. android:layout_height="wrap_content"  
  50. android:layout_gravity="bottom"  
  51. android:gravity="center"  
  52. android:layout_weight="1"  
  53. android:singleLine="true"  
  54. android:text="微信"  
  55. android:textSize="@dimen/list_cat_size" />  
  56.   
  57. </LinearLayout>  

分析:

gravity:表示在当前控件内的text属性值相对于该控件,设置text上下左右或居中的位置,在这个在上面的演示效果中,如果我们没有设置gravity属性值为center,那么效果如下:
gravity和layout_gravity区别

我们看到控件TextView的内容“新闻、政务、社区、微信”都默认左边对齐,所以可以判断gravity用于设置控件内容相对于当前控件的位置。

layout_gravity:这个属性设置的位置的“参照物”不同,达到的效果是相对于当前控件的父控件上下左右或居中的位置,同样,如果我们在上面的布局文件中去掉layout_gravity属性,保留gravity属性,看看效果如下:

gravity和layout_gravity区别

我们会发现,效果和添加了layout_gravity的效果一样呢?这是不是说,layout_gravity属性不起作用呢?这是因为在案例的TextView中,我们设置了drawableTop这个属性,同时LinearLayout的高度是固定的,那么默认的layout_gravity属性值是center,但如果我们在最后一个TextView里面去掉drawableTop属性后,在设置layout_gravity属性为top,效果就出来了,看下图:

gravity和layout_gravity区别

如果将layout_gravity属性改为bottom,效果如下:
gravity和layout_gravity区别

总结:

gravity和layout_gravity并不是所有的控件都有的属性,我们会发现该当前控件包含是某个控件的子控件的时候,可以设置子控件的layout_gravity属性,在包含text属性的Button、TextView控件中可以设置gravity的属性值,所以具体哪些控件具备gravity和layout_gravity属性,大体上说是:存在着父控件的当前控件可以设置layout_gravity属性,包含text属性内容的控件可以设置gravity属性。

关注公众号 扫一扫二维码,加我QQ

如果文章对你有帮助,欢迎点击上方按钮关注作者

来源:TeachCourse每周一次,深入学习Android教程,关注(QQ1589359239或公众号TeachCourse)
转载请注明出处:http://teachcourse.cn/488.html
分类:Android 标签:,
Fragment+FragmentTabHost实现仿QQ底部菜单栏 Fragment+FragmentTabHost实
AsyncTask==Handler+Thread对比使用说明 AsyncTask==Handler+Thread对
如何生成类似新浪微博中的长图片 如何生成类似新浪微博中的长图片
为什么Genymotion在Window10运行不了? 为什么Genymotion在Window10运

发表评论

呲牙 憨笑 坏笑 偷笑 色 微笑 抓狂 睡觉 酷 流汗 鼓掌 大哭 可怜 疑问 晕 惊讶 得意 尴尬 发怒 奋斗 衰 骷髅 啤酒 吃饭 礼物 强 弱 握手 OK NO 勾引 拳头 差劲 爱你

表情

  1. 跨境电商平台
    跨境电商平台 【农民】 @回复

    过来支持一下值得收藏分享

  2. 匿名 【农民】 @回复

    谢谢博主分享,恍然大悟

    • 巴巴博主
      巴巴博主 【县长】【站长】 @回复

      不用客气,有什么不懂的,欢迎留言咯!