相信对于Android的初学者来说,大家都曾经被layout里这两个极其相似的属性迷惑过。

简单使用一下搜索工具,我们就不难找到下面这样的答案:

layout_gravity 表示组件自身在父组件中的位置 
gravity             表示组件的子组件在组件中的位置

看似很简单嘛~)

貌似大伙瞅一眼就明白了。今天我要说的就是这貌似瞅一眼就明白的道理。 
为什么这么简单的道理,总有同学会发现,在“某些时候”,layout_gravity这个属性不好使了,失去了它应有的作用。

于是同学们又开始使用搜索工具,一边还不停的骂:Google做的这个layout真他妈的不好使! 
下面我们就网上找来的一个例子来简单描述一种layout_gravity失效的情况。

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <!-- android:gravity设置了按钮上面的文字的显示位置,而android:layout_gravity设置了按钮在布局中的显示位置。 –>
  3. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  4. android:orientation="vertical"
  5. android:layout_width="fill_parent"
  6. android:layout_height="wrap_content">
  7. <Button android:layout_width="250dip"
  8. android:gravity="right"
  9. android:layout_height="wrap_content"
  10. android:text="我居右显示"
  11. android:layout_gravity="right" />;
  12. </LinearLayout>

复制代码

这段代码的展现效果如下:!

然后我们再看下面这段代码:

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <!-- android:gravity设置了按钮上面的文字的显示位置,而android:layout_gravity设置了按钮在布局中的显示位置。 –>
  3. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  4. android:layout_width="fill_parent"
  5. android:layout_height="wrap_content">
  6. <Button android:layout_width="250dip"
  7. android:gravity="right"
  8. android:layout_height="wrap_content"
  9. android:text="我居右显示"
  10. android:layout_gravity="right" />
  11. </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的用法的更多相关文章

  1. AS中layout_gravity与gravity的区别

    gravity 这个英文单词是重心的意思,在这里就表示停靠位置的意思. android:layout_gravity 和 android:gravity 的区别 从名字上可以看到,android:gr ...

  2. Android零基础入门第26节:layout_gravity和gravity大不同

    原文:Android零基础入门第26节:layout_gravity和gravity大不同 上一期我们一起学习了LinearLayout线性布局的方向.填充模型和权重,本期来一起学习LinearLay ...

  3. Android之layout_gravity与gravity解析

    相信layout_gravity和gravity这两个属性一直困扰着很多人,很多初学者都分不清这两个属性有什么区别,以及怎样区分它们.它们中,有一个表示的是一个控件在父布局中的位置,而另一个表示的是一 ...

  4. Android中的layout_gravity和gravity的区别

    在Android的布局中,除了padding和margin容易弄混之外,还有layout_gravity和gravity.按照字面意思来说,layout_gravity就是相对于layout来设置的. ...

  5. 【SQL系列】从SQL语言的分类谈COMMIT和ROLLBACK的用法

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[SQL系列]从SQL语言的分类谈COMMIT和 ...

  6. Android中layout_gravity和gravity的区别

    安卓中的 layout_gravity 属性和 gravity属性 有啥区别? LinearLayout有两个非常相似的属性: android:gravity与android:layout_gravi ...

  7. android 布局中 layout_gravity、gravity、orientation、layout_weight【转】

    线性布局中,有 4 个及其重要的参数,直接决定元素的布局和位置,这四个参数是 android:layout_gravity ( 是本元素相对于父元素的重力方向 ) android:gravity (是 ...

  8. Android Layout_Gravity和Gravity

    简单来说layout_gravity表示子控件在父容器的位置,gravity表示控件内容在控件内的位置. 上面图片的xml代码 <?xml version="1.0" enc ...

  9. 从零开始学android开发-布局中 layout_gravity、gravity、orientation、layout_weight

    线性布局中,有 4 个及其重要的参数,直接决定元素的布局和位置,这四个参数是 android:layout_gravity ( 是本元素相对于父元素的重力方向 ) android:gravity (是 ...

随机推荐

  1. Hadoop、Pig、Hive、Storm、NOSQL 学习资源收集

    (一)hadoop 相关安装部署 1.hadoop在windows cygwin下的部署: http://lib.open-open.com/view/1333428291655 http://blo ...

  2. pythonhttp

    import urllib.requestimport http.cookiejar from urllib.error import URLError,HTTPError import urllib ...

  3. NDK(1)配置ndk,含eclipse,Android Studio1.5.1

    现在的ndk配置已经非常简单,如果看到要cygwin的请关闭. 1,Eclipse 添加ndk linux,mac ,windows 相似, a.下载 ndk并解压, b.在eclipse的andro ...

  4. shell查找匹配行,输出该行并输出下面的一行

    查找匹配行,输出该行并输出下面的一行 grep: grep -A 1 'keyword'   file awk:awk '$0~/keyword/{print $0; getline; print $ ...

  5. R语言randomForest包实现随机森林——iris数据集和kyphosis数据集

    library(randomForest)model.forest<-randomForest(Species~.,data=iris)pre.forest<-predict(model. ...

  6. HDU 2064 (递推) 汉诺塔III

    将柱子从左到右依次编号为A.B.C 设将n个盘子从一端移动到另一端的最少步数为f(n) 则f(n)和f(n-1)的递推关系为:f(n) = 3 × f(n-1) + 2 初始状态A柱子上面有n个盘子, ...

  7. Tarjan算法应用 (割点/桥/缩点/强连通分量/双连通分量/LCA(最近公共祖先)问题)(转载)

    Tarjan算法应用 (割点/桥/缩点/强连通分量/双连通分量/LCA(最近公共祖先)问题)(转载) 转载自:http://hi.baidu.com/lydrainbowcat/blog/item/2 ...

  8. 30个实用的Linux find命令

    除了在一个目录结构下查找文件这种基本的操作,你还可以用find命令实现一些实用的操作,使你的命令行之旅更加简易.本文将介绍15种无论是于新手还是老鸟都非常有用的Linux find命令 . 首先,在你 ...

  9. I.MX6 ov5640 camera

    /************************************************************************ * I.MX6 ov5640 camera * 说明 ...

  10. Java 动态眨眼 EyesJPanel (整理)

    /** * Java 动态眨眼 EyesJPanel (整理) * * 2016-1-2 深圳 南山平山村 曾剑锋 * 注意事项: * 1.本程序为java程序,同时感谢您花费宝贵的时间来阅读本文档: ...