LinearLayout的gravity属性以及其子元素的layout_gravity何时有效;RelativeLayout如何调整其子元素位置只能用子元素中的属性来控制,用RelativeLayout中的gravity无法控制!!!

LinearLayout的gravity属性以及其子元素的layout_gravity何时有效

转自:http://www.cnblogs.com/xiaoran1129/archive/2013/03/26/2982733.html

相信对于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:orientation="vertical" 
不错,正是缺少了这个属性才导致了android:layout_gravity="right"的失效。 
因为LinearLayout默认的是:android:orientation="horizontal" "

也就是说,只有在作为父layout的LinearLayout是android:orientation="vertical" 的时候,android:layout_gravity="right"才会生效。

到这里本次“讲座”可以结束了吗? No!

看完上面的内容,有同学也许还会发现,当外层的LinearLayout为android:orientation="vertical" 的时候,android:layout_gravity="bottom"失效了

看到这里相信大家都明白了

下面我们还需要做一个简单的总结: 
当作为父layout的LinearLayout的属性为android:orientation="vertical" 的时候,android:layout_gravity="?"这里设为横向的时候才能生效。比如:left,right,center_horizontal等

当作为父layout的LinearLayout的属性为android:orientation="horizental" 的时候,android:layout_gravity="?"这里设为纵向的时候才能生效。比如:top,bottom,center_vertical等;

有一个比较特殊的是center,不管是横向还是纵向的时候,它总有一个方向起作用

另外有几个别急面生的:fill_vertical,fill_horizontal,fill,clip_vertical,clip_horizontal 
这几个以前没留意过,莫非是新版本的SDK中,新引进的?分散对齐?很迷惑。 
有用过的同学还请不吝赐教一下

RelativeLayout如何调整其子元素位置只能用子元素中的属性来控制,用RelativeLayout中的gravity无法控制!!!

转自:http://blog.sina.com.cn/s/blog_4e1e357d0101am70.html

android RelativeLayout 内容居中解决办法:

使用Linearlayout本来利用父控件的gravity属性是很好解决的。但是对应RelativeLayout虽然有 gravity属性,但是如果你使用,你会发现实际他是不能生效的。
 
解决办法:
在RelativeLayout的子空间里,使用以下3个属性就行了。
 
                    android:layout_centerVertical="true"
 
                    android:layout_centerHorizontal="true"
 
gravity 一般是针对linearlayout会使用很方便。
转自:http://blog.sina.com.cn/s/blog_6efce07e01012zue.html
 
 最近在遇到RelativeLayout里的gravity属性给它复制center_horizontal或者center都不能居中它的子组件,后来找到了替代方法,只要在它的每个子组件里加上android:layout_centerHorizontal="true" 就可以了
 
                    android:layout_centerInParent="true"

LinearLayout的gravity属性以及其子元素的layout_gravity何时有效;RelativeLayout如何调整其子元素位置只能用子元素中的属性来控制,用RelativeLayout中的gravity无法控制!!!的更多相关文章

  1. ParentWindow属性及其一系列函数的作用——适合于那些不需要父控件管理内存释放的子控件

    TWinControl = class(TControl) property ParentWindow: HWnd read FParentWindow write SetParentWindow; ...

  2. 在C#中使用属性控制 XML 序列化来解析XML

    今天需要解析一个XML,这个XML和一般情况用.NET的序列化出来的格式不太一样. 我就又补习了一下. 分享一下学习成果吧. 示例代码下载: http://download.csdn.net/deta ...

  3. JQuery中根据属性或属性值获得元素

    根据属性获得元素 1.比如要获取页面p标签中属性有id的元素 $("p[id]").css("color","red"); 根据属性值获得元 ...

  4. JQuery中根据属性或属性值获得元素(6种情况获取方法)

    根据属性获得元素 1.比如要获取页面p标签中属性有id的元素 $("p[id]").css("color","red"); 根据属性值获得元 ...

  5. 黑马vue---16、vue中通过属性绑定为元素设置class类样式

    黑马vue---16.vue中通过属性绑定为元素设置class类样式 一.总结 一句话总结: 这里就是为元素绑定class样式,和后面的style样式区别一下 vue中class样式绑定方式的相对于原 ...

  6. Vue中通过属性绑定为元素绑定style行内样式

    1.直接在元素上通过:style的形式,书写样式对象 2.将样式对象定义在data中,并直接引用到:style中 3.在:style中通过数组,引用多个data上的样式对象

  7. CSS3图片翻转切换案例及其中重要属性解析

    图片翻转切换,在不使用CSS3的情况下,一般都是使用JS实现动画,同时操作元素的width和left,或者height和top以模拟翻转的效果,并在适当时候改变src或者z-index实现图片切换. ...

  8. 深入理解css中position属性及z-index属性

    深入理解css中position属性及z-index属性 在网页设计中,position属性的使用是非常重要的.有时如果不能认识清楚这个属性,将会给我们带来很多意想不到的困难. position属性共 ...

  9. flex中align-content属性

    在flex弹性盒模型中align-content属性控制容器内多行在交叉轴上的排列方式 默认值:stretch 可用值: 属性值:flex-start 属性值:flex-end 属性值:center ...

随机推荐

  1. SVD学习

    前言: 上一次写了关于PCA与LDA的文章,PCA的实现一般有两种,一种是用特征值分解去实现的,一种是用奇异值分解去实现的.在上篇文章中便是基于特征值分解的一种解释.特征值和奇异值在大部分人的印象中, ...

  2. HttpWebRequest.Method 属性

    public static void GetHead(string url) { var http = (HttpWebRequest)WebRequest.Create(url); http.Met ...

  3. Jump Game 解答

    Question Given an array of non-negative integers, you are initially positioned at the first index of ...

  4. 三十一、Java图形化界面设计——布局管理器之GridLayout(网格布局)

    摘自http://blog.csdn.net/liujun13579/article/details/7772491 三十一.Java图形化界面设计--布局管理器之GridLayout(网格布局) 网 ...

  5. A Corrupt Mayor's Performance Art(线段树区间更新+位运算,颜色段种类)

    A Corrupt Mayor's Performance Art Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 100000/100 ...

  6. 实现一次请求加载多个js或者css

    http://tengine.taobao.org/   相当牛x

  7. .net如何后台批量删除

    button_Click(Sender sender,Event e){foreach (DataListItem item in DataList1.Items){CheckBox cbox=(Ch ...

  8. 「前端开发者」如何把握住「微信小程序」这波红利?

    由于前两周一直在老家处理重要事情,虽然朋友圈被「微信小程序」刷爆了,但并没有时间深入了解. 昨天回广州之后,第一件事情就是把「微信小程序」相关的文章.开发文档.设计规范全部看了一遍,基本上明白了「微信 ...

  9. 【原创】System.Data.SQLite内存数据库模式

    对于很多嵌入式数据库来说都有对于的内存数据库模式,SQLite也不例外.内存数据库常常用于极速.实时的场景,一个很好的应用的场景是富客户端的缓存数据,一般富客户端的缓存常常需要分为落地和非落地两种,而 ...

  10. SyntaxError: Non-ASCII character '\xe2' in file 编码错误

    Editing .py file in the Notepad: But when run in the PowerShell, I found the follwing error: It seem ...