谈layout_gravity和gravity的用法
相信对于Android的初学者来说,大家都曾经被layout里这两个极其相似的属性迷惑过。
简单使用一下搜索工具,我们就不难找到下面这样的答案:
layout_gravity 表示组件自身在父组件中的位置
gravity 表示组件的子组件在组件中的位置
看似很简单嘛~)
貌似大伙瞅一眼就明白了。今天我要说的就是这貌似瞅一眼就明白的道理。
为什么这么简单的道理,总有同学会发现,在“某些时候”,layout_gravity这个属性不好使了,失去了它应有的作用。
于是同学们又开始使用搜索工具,一边还不停的骂:Google做的这个layout真他妈的不好使!
下面我们就网上找来的一个例子来简单描述一种layout_gravity失效的情况。
- <?xml version="1.0" encoding="utf-8"?>
- <!-- android:gravity设置了按钮上面的文字的显示位置,而android:layout_gravity设置了按钮在布局中的显示位置。 –>
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:orientation="vertical"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content">
- <Button android:layout_width="250dip"
- android:gravity="right"
- android:layout_height="wrap_content"
- android:text="我居右显示"
- android:layout_gravity="right" />;
- </LinearLayout>
复制代码
这段代码的展现效果如下:!

然后我们再看下面这段代码:
- <?xml version="1.0" encoding="utf-8"?>
- <!-- android:gravity设置了按钮上面的文字的显示位置,而android:layout_gravity设置了按钮在布局中的显示位置。 –>
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content">
- <Button android:layout_width="250dip"
- android:gravity="right"
- android:layout_height="wrap_content"
- android:text="我居右显示"
- android:layout_gravity="right" />
- </LinearLayout>
复制代码
这段代码我们一样设置了android:layout_gravity="right",但是它的展现效果却是下面这样的:

于是我们前面所说的情况就发生了,“Google做的这个layout真他妈的不好使!”
问题究竟出在哪里了呢?
细心一点的同学就会发现,下面的这段代码,最外层的LinearLayout少了这样一个属性:android:rientation="vertical"
不错,正是缺少了这个属性才导致了android:layout_gravity="right"的失效。
因为LinearLayout默认的是:android:rientation="horizontal" "
也就是说,只有在作为父layout的LinearLayout是android:rientation="vertical" 的时候,android:layout_gravity="right"才会生效。
到这里本次“讲座”可以结束了吗? No!
看完上面的内容,有同学也许还会发现,当外层的LinearLayout为android:rientation="vertical" 的时候,android:layout_gravity="bottom"失效了
看到这里相信大家都明白了
下面我们还需要做一个简单的总结:
当作为父layout的LinearLayout的属性为android:rientation="vertical" 的时候,android:layout_gravity="?"这里设为横向的时候才能生效。比如:left,right,center_horizontal等
当作为父layout的LinearLayout的属性为android:rientation="horizental" 的时候,android:layout_gravity="?"这里设为纵向的时候才能生效。比如:top,bottom,center_vertical等;
有一个比较特殊的是center,不管是横向还是纵向的时候,它总有一个方向起作用
另外有几个别急面生的:fill_vertical,fill_horizontal,fill,clip_vertical,clip_horizontal
这几个以前没留意过,莫非是新版本的SDK中,新引进的?分散对齐?很迷惑。
有用过的同学还请不吝赐教一下
谈layout_gravity和gravity的用法的更多相关文章
- AS中layout_gravity与gravity的区别
gravity 这个英文单词是重心的意思,在这里就表示停靠位置的意思. android:layout_gravity 和 android:gravity 的区别 从名字上可以看到,android:gr ...
- Android零基础入门第26节:layout_gravity和gravity大不同
原文:Android零基础入门第26节:layout_gravity和gravity大不同 上一期我们一起学习了LinearLayout线性布局的方向.填充模型和权重,本期来一起学习LinearLay ...
- Android之layout_gravity与gravity解析
相信layout_gravity和gravity这两个属性一直困扰着很多人,很多初学者都分不清这两个属性有什么区别,以及怎样区分它们.它们中,有一个表示的是一个控件在父布局中的位置,而另一个表示的是一 ...
- Android中的layout_gravity和gravity的区别
在Android的布局中,除了padding和margin容易弄混之外,还有layout_gravity和gravity.按照字面意思来说,layout_gravity就是相对于layout来设置的. ...
- 【SQL系列】从SQL语言的分类谈COMMIT和ROLLBACK的用法
公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[SQL系列]从SQL语言的分类谈COMMIT和 ...
- Android中layout_gravity和gravity的区别
安卓中的 layout_gravity 属性和 gravity属性 有啥区别? LinearLayout有两个非常相似的属性: android:gravity与android:layout_gravi ...
- android 布局中 layout_gravity、gravity、orientation、layout_weight【转】
线性布局中,有 4 个及其重要的参数,直接决定元素的布局和位置,这四个参数是 android:layout_gravity ( 是本元素相对于父元素的重力方向 ) android:gravity (是 ...
- Android Layout_Gravity和Gravity
简单来说layout_gravity表示子控件在父容器的位置,gravity表示控件内容在控件内的位置. 上面图片的xml代码 <?xml version="1.0" enc ...
- 从零开始学android开发-布局中 layout_gravity、gravity、orientation、layout_weight
线性布局中,有 4 个及其重要的参数,直接决定元素的布局和位置,这四个参数是 android:layout_gravity ( 是本元素相对于父元素的重力方向 ) android:gravity (是 ...
随机推荐
- HDU4675【GCD of scequence】【组合数学、费马小定理、取模】
看题解一开始还有地方不理解,果然是我的组合数学思维比较差 然后理解了之后自己敲了一个果断TLE.... 我以后果然还得多练啊 好巧妙的思路啊 知识1: 对于除法取模还需要用到费马小定理: a ^ (p ...
- Django自定义模型(model)中的字段标签
方法一: 在编辑页面中,每个字段的标签都是从模块的字段名称生成的. 规则很简单: 用空格替换下划线:首字母大写.例如:Book模块中publication_date的标签是Publication da ...
- Lucene学习笔记(更新)
1.Lucene学习笔记 http://www.cnblogs.com/hanganglin/articles/3453415.html
- YTU 2616: A代码完善--简易二元运算
2616: A代码完善--简易二元运算 时间限制: 1 Sec 内存限制: 128 MB 提交: 280 解决: 187 题目描述 注:本题只需要提交填写部分的代码,请按照C++方式提交. 编写二 ...
- PHP文件上传代码和逻辑详解
文件上传的逐步完善------ [简单的上传:] <form action="upload.php" method="post" enctype= ...
- PHP的模板引擎这点事儿
什么是模板引擎? 为什么要使用它? 为什么要assign一个变量给模板? https://dbforch.wordpress.com/2010/06/26/the-logic-behind-templ ...
- how to check unsolved conflicts file list in git merge?
how to check unsolved conflicts file list in git merge?
- PHP学习笔记03——函数
<!DOCTYPE unspecified PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www. ...
- BZOJ 3754 Tree之最小方差树
枚举平均数. mdzz编译器. #include<iostream> #include<cstdio> #include<cstring> #include< ...
- HDU 1599 find the mincost route (无向图的最小环)
题意: 给一个带权无向图,求其至少有3个点组成的环的最小权之和. 思路: (1)DFS可以做,实现了确实可以,只是TLE了.量少的时候应该还是可以水一下的.主要思路就是,深搜过程如果当前点搜到一个点访 ...