也许你们当中有些人会感到困惑、卡住,或者疑惑为什么 TextView 的垂直 / 水平对齐方式在实际效果中不起作用。下面是一些重要的要点和示例,可以帮助你理解它是如何工作的:
- 检查父布局(LinearLayout)的宽高。 假设你想把多个 TextView 垂直居中到 LinearLayout 的中间。使用下面的布局示例时,gravity 和 layout_gravity 都不会生效,因为父布局(LinearLayout)的高度与其子视图(TextView)的总高度相同,子视图没有多余的空间可以移动。
android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="horizontal" android:background="@color/black"> <TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="Text1"android:textColor="@color/white"android:textSize="32sp"/> <TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:textColor="@color/white"android:text="Text2"android:textSize="10sp"/>

- gravity 用于控制 View(TextView)内部内容的对齐方式,而 layout_gravity 用于控制 TextView 相对于其父布局(LinearLayout)的对齐方式。
如果我们按下面的示例来设置 gravity:
android:layout_width="wrap_content"android:layout_height="100dp"android:orientation="horizontal"android:background="@color/black">
<TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="Text1"android:textColor="@color/white"android:textSize="32sp"/><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:textColor="@color/white"android:text="Text2"android:textSize="10sp"/>
我们会得到与之前相同的效果:Text1 和 Text2 并不会垂直居中,因为 gravity 应用于高度为 “wrap_content” 的视图时,其自身没有多余的高度空间可以用于居中。

如果要让 TextView 垂直居中,我们需要使用 “layout_gravity” 属性。layout_gravity 用于设置 TextView 相对于父布局(LinearLayout)的对齐方式。请看下面的代码:
<!--?xml version="1.0" encoding="utf-8"?-->android:layout_width="wrap_content"android:layout_height="100dp"android:orientation="horizontal"android:background="@color/black"> <TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="Text1"android:textColor="@color/white"android:textSize="32sp"android:gravity="center"/> <TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:textColor="@color/white"android:text="Text2"android:textSize="10sp"android:gravity="center"/>

接下来的问题是:“我们能否只用 gravity 来让内容居中?”答案是可以,而且可以实现与上面相同的效果。为此,我们需要再次仔细查看下面的代码。注意两个 TextView 的 layout_height 值,它们都被设置为 “wrap_content”,这就是为什么 Text2 的内容没有显示在中间的原因。
android:layout_width="wrap_content"android:layout_height="100dp"android:orientation="horizontal"android:background="@color/black"> <TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="Text1"android:textColor="@color/white"android:textSize="32sp"/> <TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:textColor="@color/white"android:text="Text2"android:textSize="10sp"/>
将 layout_height 的值设置为 “match_parent” 就可以解决这个问题。我们的代码会变成:
<TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="Text1"android:textColor="@color/white"android:textSize="32sp"android:layout_gravity="center" /> <TextViewandroid:layout_width="wrap_content"android:layout_height="match_parent"android:textColor="@color/white"android:text="Text2"android:textSize="10sp"android:gravity="center"/>

现在我们可以看到,gravity 和 layout_gravity 都可以用来对齐和定位视图。
希望这些内容能帮助你更好地理解 TextView 的 gravity 使用方式。
祝你愉快地进行 Android 编程!
Ace Mark Urma
Ace Mark Urma
Ace has built up amazing skills as a backend developer and IT programmer over a decade of high-level experience and study. He has worked with SEIRIM for nearly 8 years, building a wide array of complex and high performance web applications and projects.
Ready to Get Secure?
The SEIRIM team of professionals is at your service to design, develop and deliver better cybersecurity for your organization.
let’s connect