layout_gravity和gravity 关于属性失效问题
来源:互联网 发布:天津好吃的地方知乎 编辑:程序博客网 时间:2024/06/06 02:03
相信对于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少了这样一个属性:androidrientation="vertical"
不错,正是缺少了这个属性才导致了android:layout_gravity="right"的失效。
因为LinearLayout默认的是:androidrientation="horizontal" "
也就是说,只有在作为父layout的LinearLayout是androidrientation="vertical" 的时候,android:layout_gravity="right"才会生效。
到这里本次“讲座”可以结束了吗? No!
看完上面的内容,有同学也许还会发现,当外层的LinearLayout为androidrientation="vertical" 的时候,android:layout_gravity="bottom"失效了
看到这里相信大家都明白了
下面我们还需要做一个简单的总结:
当作为父layout的LinearLayout的属性为androidrientation="vertical" 的时候,android:layout_gravity="?"这里设为横向的时候才能生效。比如:left,right,center_horizontal等
当作为父layout的LinearLayout的属性为androidrientation="horizental" 的时候,android:layout_gravity="?"这里设为纵向的时候才能生效。比如:top,bottom,center_vertical等;
有一个比较特殊的是center,不管是横向还是纵向的时候,它总有一个方向起作用
另外有几个别急面生的:fill_vertical,fill_horizontal,fill,clip_vertical,clip_horizontal
这几个以前没留意过,莫非是新版本的SDK中,新引进的?分散对齐?很迷惑。
有用过的同学还请不吝赐教一下
- layout_gravity和gravity 关于属性失效问题
- android layout_gravity gravity 失效的问题
- 也谈layout_gravity和gravity的用法,以及layout_gravity失效
- layout_gravity gravity失效
- Android:layout_gravity 属性和 gravity属性
- android:gravity和android:layout_Gravity属性
- android android:gravity 和 android:layout_Gravity属性
- android:gravity和android:layout_gravity属性
- android:layout_gravity和android:gravity属性区别
- android:gravity 和 android:layout_Gravity属性区别
- android 布局中 gravity 和 layout_gravity 属性
- Android 之gravity 和layout_Gravity属性
- android 布局中 gravity 和 layout_gravity 属性
- android:gravity和android:layout_Gravity属性
- New UI-gravity和layout_gravity属性解析
- Android:gravity 和 android:layout_gravity属性
- layout_gravity和gravity属性的区别(Android)
- android:gravity 和 android:layout_Gravity属性 .
- SQLSERVER角色详解
- 用iptables实现网页重定向
- 自定义TabHost,TabWidget样式 .
- Some characters cannot be mapped using "Cp1252" character encoding 解决方法
- 进程隐藏与进程保护(SSDT Hook 实现)(一)
- layout_gravity和gravity 关于属性失效问题
- 进程隐藏与进程保护(SSDT Hook 实现)(二)
- android 网络判断
- 闲来无事,复习复习以前的东西---hibernate中的关联映射图解 ---- 复合主键
- Nginx下Magento伪静态规则,适用于LNMP一键包
- C语言初学者的十八颗“地雷”
- 详解Android中AsyncTask的使用
- happens-before原则
- RSA加密解密-实例