也谈layout_gravity和gravity的用法

布局属性layout_gravity与orientation使用误区
本文探讨了在Android开发中,layout_gravity属性在不同orientation设置下的使用误区,通过实例解释了如何正确应用这些属性以避免常见的布局问题。


相信对于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,不管是横向还是纵向的时候,它总有一个方向起作用.

Android 布局中,layout_gravity gravity 是两个容易混淆的属性,下面详细介绍它们的含义、区别及使用方法。 ### 含义 - **layout_gravity**:按照字面意思,是相对于 layout 来设置的,通俗来讲就是当前控件之外的位置,用于设置该 view 相对于父 view 的位置 [^2]。 - **gravity**:是对该 view 中内容的限定,例如一个 Button 上面的 text,可以设置该 text 相对于 view 的靠左、靠右等位置 [^3]。 ### 区别 - **作用对象不同**:layout_gravity 作用于当前控件相对于父布局的位置;gravity 作用于控件内部内容的位置 [^2][^3]。 - **受父布局方向影响不同**:当父布局的属性 android:orientation="horizontal" 时,子控件属性 android:layout_gravity 在水平方向将失效,而竖直方向不受影响,继续起作用;当父布局的属性 android:orientation="vertical" 时,子控件属性 android:layout_gravity 在竖直方向将失效,而水平方向不受影响,继续起作用 [^4]。 ### 使用方法 - **layout_gravity**:比如一个 Button 在 LinearLayout 里,若想把该 Button 放在 LinearLayout 里靠左、靠右等位置,就可以通过该属性设置。示例代码如下: ```xml <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal"> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Button" android:layout_gravity="right" /> </LinearLayout> ``` - **gravity**:例如要设置一个 TextView 中的文字在控件中居中显示,可使用该属性。示例代码如下: ```xml <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Hello World" android:gravity="center" /> ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值