You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让两个自动适配字号的TextView实现垂直居中布局?

我明白你遇到的问题了——当开启文字自动适配后,原本的垂直平分居中布局就跑偏了,对吧?这其实是因为你给第一个TextView加了一个不必要的垂直偏移属性,导致它在分配的空间里没有居中。

问题根源分析

你的代码里,第一个TextView设置了app:layout_constraintVertical_bias="0",这个属性会强制它在top_toTopOf="parent"和bottom_toTopOf="@+id/TextView2"的约束区间里完全靠顶部对齐,而不是居中。当文字固定大小时,文字高度几乎占满了分配的空间,所以视觉上看起来没问题;但开启autoSize后,文字会根据空间自动缩小,这个偏移属性就会让文字贴在区域顶部,导致整体布局偏离你想要的上下平分居中效果。

修正方案

只需要做一个关键调整,再保留必要的约束设置就能解决问题:

  1. 移除第一个TextView的app:layout_constraintVertical_bias="0",让ConstraintLayout默认的垂直居中(bias默认值为0.5)生效
  2. 保持两个TextView的layout_height="0dp",确保它们平分父容器的垂直空间
  3. 保留android:gravity="center",保证文字在各自的区域内垂直水平居中

修正后的完整代码

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/layout1"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@drawable/border"
    android:gravity="center"
    android:orientation="vertical">

    <android.support.v7.widget.AppCompatTextView
        android:id="@+id/TextView1"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:gravity="center"
        android:text="Top"
        app:autoSizeMaxTextSize="40dp"
        app:autoSizeMinTextSize="4dp"
        app:autoSizeTextType="uniform"
        app:layout_constraintBottom_toTopOf="@+id/TextView2"
        app:layout_constraintTop_toTopOf="parent" />

    <android.support.v7.widget.AppCompatTextView
        android:id="@+id/TextView2"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:gravity="center"
        android:paddingLeft="30dp"
        android:paddingRight="30dp"
        android:text="Bottom"
        app:autoSizeMaxTextSize="24dp"
        app:autoSizeMinTextSize="4dp"
        app:autoSizeTextType="uniform"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/TextView1" />

</android.support.constraint.ConstraintLayout>

这样修改后,两个TextView会各自占据父容器一半的垂直空间,文字在自己的区域内居中显示,同时自动适配大小,不管文字内容长短,都能保持你想要的左侧理想布局效果。

内容的提问来源于stack exchange,提问作者Christian

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 10:17:04