LinearLayout-layout_gravity 属性没有效果分析

今天在一个布局文件中,遇到了一个问题,先看代码

 <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:paddingBottom="21dip"
        android:paddingLeft="@dimen/setup_fragment_padding_left"
        android:paddingRight="@dimen/setup_fragment_padding_right" >

        <!-- Buttons below -->
            <!--
        In order to show these buttons above the IME keyboard, we need to special case the to
        padding to a smaller height.
            -->
        <Button
            android:id="@+id/manual_setup"
            style="@style/accountSetupButtonVfive"
            android:layout_width="120dp"
            android:layout_height="wrap_content"
            android:layout_marginLeft="@dimen/button_margin_left"
            android:background="@drawable/email_btn_set"
            android:text="@string/account_setup_basics_manual_setup_action" />

        <Button
            android:id="@+id/next"
            style="@style/accountSetupButtonVfive"
            android:layout_width="120dp"
            android:layout_height="wrap_content"
            android:background="@drawable/email_btn_next"
            android:layout_marginRight="@dimen/button_margin_right"
            android:text="@string/next_action" />
    </LinearLayout>

上述代码的目的,就是让两个按钮,一个靠左边,一个靠右边。我增加了一个属性

<android:layout_gravity="right">

结果发现一直不起作用。后来在网上查到了相关的解释

如下

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

看似很简单嘛

为什么这么简单的道理,总有同学会发现,在“某些时候”,layout_gravity这个属性不好使了,失去了它应有的作用

问题究竟出在哪里了呢?

当作为父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,不管是横向还是纵向的时候,它总有一个方向起作用, 因为LinearLayout他只可能有一个方向,

这nm的,确实让人蛋疼。其实也有点道理吧,就是LinearLayout横向的时候,如果有多个孩子,那就不知道把谁放最右了,

有两个解决方法吧,

(1)用RelativeLayout吧,这个算是费话吧 ,哈哈

(2)在LinearLayout中设置android:gravity这个从官方api的解释是怎么放置它的内容,LinearLayout的内容不就是他的孩子么,问题解决

现在根据它的提示,进行验证

1)在LinearLayout 中添加gravity属性

<LinearLayout
        android:layout_width="match_parent"
        android:layout_height="200dp"     android:background="#ff0000"
        android:orientation="horizontal"
        android:paddingBottom="21dip"
        android:gravity="bottom"
        android:paddingLeft="@dimen/setup_fragment_padding_left"
        android:paddingRight="@dimen/setup_fragment_padding_right" >

        <Button
            android:id="@+id/manual_setup"
            style="@style/accountSetupButtonVfive"
            android:layout_width="120dp"
            android:layout_height="wrap_content"
            android:layout_marginLeft="@dimen/button_margin_left"
            android:background="@drawable/email_btn_set"
            android:text="@string/account_setup_basics_manual_setup_action" />

        <Button
            android:id="@+id/next"
            style="@style/accountSetupButtonVfive"
            android:layout_width="120dp"
            android:layout_height="wrap_content"
            android:background="@drawable/email_btn_next"
            android:layout_marginRight="@dimen/button_margin_right"
            android:text="@string/next_action" />
    </LinearLayout>

结果:

所以,gravity是有效的

2)在单个button中添加layout_gravity属性

代码

<LinearLayout
        android:layout_width="match_parent"
        android:layout_height="200dp"
        android:background="#ff0000"
        android:orientation="horizontal"
        android:paddingBottom="21dip"
        android:paddingLeft="@dimen/setup_fragment_padding_left"
        android:paddingRight="@dimen/setup_fragment_padding_right" >

        <!-- Buttons below -->
            <!--
        In order to show these buttons above the IME keyboard, we need to special case the to
        padding to a smaller height.
            -->
        <Button
            android:id="@+id/manual_setup"
            style="@style/accountSetupButtonVfive"
            android:layout_width="120dp"
            android:layout_height="wrap_content"
            android:layout_marginLeft="@dimen/button_margin_left"
            android:background="@drawable/email_btn_set"
            android:layout_gravity="bottom"
            android:text="@string/account_setup_basics_manual_setup_action" />

        <Button
            android:id="@+id/next"
            style="@style/accountSetupButtonVfive"
            android:layout_width="120dp"
            android:layout_height="wrap_content"
            android:background="@drawable/email_btn_next"
            android:layout_marginRight="@dimen/button_margin_right"
            android:text="@string/next_action" />
    </LinearLayout>

结果如下

有效果的

3)如果添加的是layout_gravity="right"属性,已经验证没效果。

这就证明了上述结论

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

时间: 2024-10-13 09:49:13

LinearLayout-layout_gravity 属性没有效果分析的相关文章

【Android布局】在程序中设置android:gravity 和 android:layout_Gravity属性

在进行UI布局的时候,可能常常会用到 android:gravity  和 android:layout_Gravity 这两个属性. 关于这两个属性的差别,网上已经有许多人进行了说明,这边再简单说一下. (资料来自网络) LinearLayout有两个很类似的属性: android:gravity与android:layout_gravity. 他们的差别在于: android:gravity 属性是对该view中内容的限定.比方一个button 上面的text. 你能够设置该text 相对于

android 布局中 gravity 和 layout_gravity 属性

gravity 这个英文单词是重心的意思,在这里就表示停靠位置的意思. android:gravity 和 android:layout_gravity 的区别: android:gravity 是设置该view里面的内容相对于该view的位置,例如设置button里面的text相对于view的靠左,居中等位置.(也可以在Layout布局属性中添加,设置Layout中组件的位置). android:layout_gravity 是用来设置该view相对与父view的位置,例如设置button在l

在程序中设置android:gravity 和 android:layout_Gravity属性 .

转载自:http://blog.csdn.net/feng88724/article/details/6333809  作者:feng88724 在进行UI布局的时候,可能经常会用到 android:gravity  和 android:layout_Gravity 这两个属性. 关于这两个属性的区别,网上已经有很多人进行了说明,这边再简单说一下. (资料来自网络) LinearLayout有两个非常相似的属性: android:gravity与android:layout_gravity. 他

New UI-gravity和layout_gravity属性解析

New UI-gravity和layout_gravity属性解析  --转载请注明出处:coder-pig,欢迎转载,请勿用于商业用途! 小猪Android开发交流群已建立,欢迎大家加入,无论是新手,菜鸟,大神都可以,小猪一个人的 力量毕竟是有限的,写出来的东西肯定会有很多纰漏不足,欢迎大家指出,集思广益,让小猪的博文 更加的详尽,帮到更多的人,O(∩_∩)O谢谢! 小猪Android开发交流群:小猪Android开发交流群群号:421858269 新Android UI实例大全目录:http

android:gravity 和 android:layout_Gravity属性

LinearLayout有两个非常相似的属性: android:gravity 与android:layout_gravity. 他们的区别在于: android:gravity 属性是对该view中内容的限定.比如一个button 上面的text. 你可以设置该text 相对于view的靠左,靠右等位置. android:layout_gravity 是用来设置该view相对与父view 的位置.比如一个button 在linearlayout里,你想把该button放在linearlayou

layout_gravity属性和gravity属性区别(转载)

android的 layout_gravity 属性和 gravity属性 有啥区别? LinearLayout有两个非常相似的属性: android:gravity与android:layout_gravity. 他们的区别在于: android:gravity 属性是对该view中内容的限定.比如一个button 上面的text. 你可以设置该text 相对于view的靠左,靠右等位置. android:layout_gravity是用来设置该view相对与父view 的位置.比如一个but

css图片切换效果分析+翻译整理

Demos:http://tympanus.net/Tutorials/CSS3SlidingImagePanels/ 出处:http://tympanus.net/codrops/2012/01/17/sliding-image-panels-with-css3/ 这个教程将介绍如何使用纯CSS创建一个干净的幻灯图片面板.主要想法是在面板中使用背景图片,然后在点击标签后让动画起效. 今天我们将向您展示如何创建仅适用于CSS一些巧妙的滑动图像面板.该想法是使用背景图像的面板和一个标签上点击时动画

layout_gravity属性加强理解

layout_gravity 是LinearLayout 子元素的特有属性. 对于layout_gravity, 该属性用于设置控件相对于容器的对齐方式,可选项有:top.bottom.left.right.center_vertical.fill_vertical . center.fill等等. 这些可选项中不是适用于每一种布局.在垂直线性布局中,android:gravity为bottom不起作用:而水平线性布局中,android:gravity为right不起作用. [注意]本属性是an

分类器效果分析

假设有两个分类器A,B.A在1000个样本的集合上有75%的准确率:B在200个样本的集合上有85%的准确率.我们要怎样评价这两个分类器的效果? 这就是这里要讨论的分类器效果分析. 抛硬币的例子 硬币正面的概率为50%,那么做N次随机试验,也就是N次的伯努利试验.根据概率的知识,我们知道,正面硬币个数X满足B(0.5N,0.5*0.5*N)的伯努利分布. 再根据大数定理,假设N足够大,那么X满足N(0.5N,0,5*0,5*N)的正态分布. 准确率acc=X /N,我们可以得出acc的分布: a