协慌网

登录 贡献 社区

Android 中的 gravity 和 layout_gravity 有什么区别?

我知道我们可以将以下值设置为android:gravityandroid:layout_gravity属性:

  1. center
  2. center_vertical
  3. center_horizontal

但我对这两个问题感到困惑。

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

答案

他们的名字可以帮助你:

  • android:gravity设置它所使用的View的内容(即它的子视图)的重力。
  • android:layout_gravity设置ViewLayout相对于其父级的重力。

而一个例子是在这里

内 - 外

  • gravity排列视图的内容。
  • lay <strong>out</strong> _gravity安排的本身之外的视图的位置。

有时候看图片也会有所帮助。绿色和蓝色是TextViews ,另外两种背景颜色是LinearLayouts

在此输入图像描述

笔记

  • layout_gravity不适用于RelativeLayout视图。将它用于LinearLayoutFrameLayout视图。有关详细信息,请参阅我的补充答案
  • 视图的宽度(或高度)必须大于其内容。否则gravity不会有任何影响。因此, wrap_contentgravity在一起是没有意义的。
  • 视图的宽度(或高度)必须小于父级。否则layout_gravity将不起任何作用。因此, match_parentlayout_gravity一起没有意义。
  • layout_gravity=center在这里看起来与layout_gravity=center_horizontal相同,因为它们处于垂直线性布局中。在这种情况下,您不能垂直居中,因此layout_gravity=center仅水平居中。
  • 此答案仅涉及在布局中的视图上设置gravitylayout_gravity 。要查看设置父布局本身的gravity时会发生什么,请查看我上面提到的补充答案 。 (总结: gravityRelativeLayout上不能很好地工作,但对于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>

有关

区别

android:layout_gravity是 View 的外部重力。指定视图应触及其父边框的方向。

android:gravity是该视图的内部重力。指定其内容应对齐的方向。

HTML / CSS 等价物

Android                 | CSS
————————————————————————+————————————
android:layout_gravity  | float
android:gravity         | text-align

简单的技巧,以帮助您记住

layout-gravity视为 “外部重力”。