也许有些人会感到困惑、遇到了困难,或者想知道为什么 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)的对齐方式。请看下面的代码:
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 凭借十余年的资深从业经验与持续钻研,在后端开发和 IT 编程领域积累了卓越的专业技能。Ace 加入 SEIRIM 团队以来,打造了众多复杂且高性能的 Web 应用程序与项目。
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