我知道我们可以为android设置以下值:gravity和android:layout_gravity财产:

居中中心_垂直center_horizontal等。

但我对这两者都感到困惑。

android:gravity和android:layout_gravity的用法有什么区别?


当前回答

两者的基本区别在于-

android:gravity用于视图的子元素。

android:layoutgravity用于相对于父视图的此元素。

其他回答

内部-外部

重力在视图内排列内容。layout_gravity将视图的位置安排在其自身之外。

有时看照片也会有帮助。绿色和蓝色是文本视图,其他两种背景色是LinearLayouts。

笔记

layout_gravity不适用于RelativeLayout中的视图。用于LinearLayout或FrameLayout中的视图。有关更多详细信息,请参阅我的补充答案。视图的宽度(或高度)必须大于其内容。否则重力不会有任何影响。因此,包裹和重力在一起是没有意义的。视图的宽度(或高度)必须小于父视图。否则layout_gravity不会有任何影响。因此,match_parent和layout_gravity在一起没有意义。layout_gravity=center与此处的layout_ggravity=center_horizontal看起来相同,因为它们是垂直线性布局。在这种情况下,不能垂直居中,因此layout_gravity=仅水平居中。这个答案只涉及在布局中的视图上设置重力和layout_gravity。要查看当您设置父布局本身的重力时会发生什么,请查看我上面提到的补充答案。(总结:重力在RelativeLayout中不太适用,但在LinearLayout中可能有用。)

所以请记住,layout_gravity在布局中排列视图。重力在视图内排列内容。

xml

以下是上述图像的xml,供您参考:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:background="#e3e2ad"
        android:orientation="vertical" >

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_horizontal"
            android:textSize="24sp"
            android:text="gravity=" />

        <TextView
            android:layout_width="200dp"
            android:layout_height="40dp"
            android:background="#bcf5b1"
            android:gravity="left"
            android:text="left" />

        <TextView
            android:layout_width="200dp"
            android:layout_height="40dp"
            android:background="#aacaff"
            android:gravity="center_horizontal"
            android:text="center_horizontal" />

        <TextView
            android:layout_width="200dp"
            android:layout_height="40dp"
            android:background="#bcf5b1"
            android:gravity="right"
            android:text="right" />

        <TextView
            android:layout_width="200dp"
            android:layout_height="40dp"
            android:background="#aacaff"
            android:gravity="center"
            android:text="center" />

    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:background="#d6c6cd"
        android:orientation="vertical" >

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_horizontal"
            android:textSize="24sp"
            android:text="layout_gravity=" />

        <TextView
            android:layout_width="200dp"
            android:layout_height="40dp"
            android:layout_gravity="left"
            android:background="#bcf5b1"
            android:text="left" />

        <TextView
            android:layout_width="200dp"
            android:layout_height="40dp"
            android:layout_gravity="center_horizontal"
            android:background="#aacaff"
            android:text="center_horizontal" />

        <TextView
            android:layout_width="200dp"
            android:layout_height="40dp"
            android:layout_gravity="right"
            android:background="#bcf5b1"
            android:text="right" />

        <TextView
            android:layout_width="200dp"
            android:layout_height="40dp"
            android:layout_gravity="center"
            android:background="#aacaff"
            android:text="center" />

    </LinearLayout>

</LinearLayout>

相关的

视图填充和边距之间的差异匹配_租用vs包装_内容如何编程设置LinearLayout的重力和布局重力

重力用于设置视图中的文本对齐方式,但layout_Gravity用于设置视图本身。举个例子,如果你想对齐editText中的文本,然后使用重力,你想对齐这个editText或任何按钮或任何视图,然后使用layout_gravity,所以非常简单。

我只是想在这里添加我自己的解释-来自iOS的背景,这是我如何在iOS术语中内化两者的:

布局重力会影响您在超级视图中的位置。重力会影响子视图在您体内的位置。

另一种说法是,布局重力定位你自己,而重力定位你的孩子。

gravity:用于文本视图、编辑文本等简单视图。

layout_gravity:用于当前视图在其相对父视图(如linear layout或FrameLayout)的上下文中的重力,以使视图位于父视图的中心或任何其他重力。

重力:允许您移动容器内的内容。(如何放置子视图)。

重要提示:(在可用空间内沿X轴或Y轴移动)。

示例:假设您要使用LinearLayout(Height:match_parent,Width:match_parent)作为根级元素,那么您将拥有完整的帧空间;并且子视图表示LinearLayout内的2个文本视图(Height:wrap_content,Width:wrap-content)可以使用父视图上的重力值沿x/y轴移动。

Layout_Gravity:允许您仅沿x轴覆盖父重力行为。

重要提示:(在可用空间内沿X轴移动[覆盖])。

示例:如果您记住前面的示例,我们知道重力使我们能够沿着x/y轴移动,即:;将TextViews放置在LinearLayout中。让我们假设LinearLayout指定重力:中心;这意味着每个TextView都需要垂直和水平居中。现在,如果我们希望其中一个TextView向左/向右移动,我们可以使用TextView上的layout_gravity覆盖指定的重力行为。

另外:如果你深入挖掘,你会发现TextView中的文本充当子视图;因此,如果在TextView上应用重力,TextView内的文本将四处移动。(整个概念也适用于此)