如何在XML布局中实现两个TextView的文本顶行对齐?(请勿提供margin偏移或includeFontPadding相关方案)
这个问题我之前也碰到过!你现在用RelativeLayout的layout_alignTop只是对齐了两个TextView的视图顶部,但TextView默认会把文本垂直居中显示,所以不同字号的文本顶部自然没法对齐——哪怕你之前加了includeFontPadding="false",现在还不能用这个属性对吧?
给你两个符合要求的解决方案,都不需要用margin偏移或者includeFontPadding:
方案1:LinearLayout + TextView gravity 属性
把布局换成LinearLayout,关闭默认的基线对齐,再给每个TextView设置文本顶部对齐,就能让文本顶行对齐:
<LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="horizontal" android:baselineAligned="false" android:gravity="top"> <TextView android:id="@+id/text1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="TEST 1" android:textSize="64sp" android:gravity="top"/> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="TEST 2" android:textSize="16sp" android:layout_marginLeft="8dp" android:gravity="top"/> </LinearLayout>
方案2:ConstraintLayout + TextView gravity 属性
如果更习惯用ConstraintLayout,同样给每个TextView设置文本顶部对齐,再让两个TextView的视图顶部对齐即可:
<androidx.constraintlayout.widget.ConstraintLayout android:layout_width="wrap_content" android:layout_height="wrap_content"> <TextView android:id="@+id/text1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="TEST 1" android:textSize="64sp" android:gravity="top" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent"/> <TextView android:id="@+id/text2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="TEST 2" android:textSize="16sp" android:gravity="top" app:layout_constraintStart_toEndOf="@+id/text1" app:layout_constraintTop_toTopOf="@+id/text1" android:layout_marginLeft="8dp"/> </androidx.constraintlayout.widget.ConstraintLayout>
原理说明
android:gravity="top"让TextView内部的文本紧贴视图顶部,代替默认的垂直居中显示- LinearLayout的
baselineAligned="false"是为了关闭默认的基线对齐逻辑,避免干扰我们的顶对齐需求 - 两种方案的核心都是:让两个TextView的视图顶部对齐,同时让文本各自贴紧视图顶部,自然就实现了文本的顶行对齐。
内容的提问来源于stack exchange,提问作者Style-7
相关产品推荐
相关产品推荐

