垂直对齐两个 TextView,使它们的宽度完全相同

Align two TextViews vertically so they are the exact same width

如果我有两个垂直对齐的文本视图,其中一个或另一个可以包含较长的文本,我如何垂直对齐它们,使它们的背景图像看起来像是两个文本视图的一个完整背景(所以一个大盒子无论这些视图中的哪一个包含更长的文本)

原因是我在图片的顶部使用了 textview,但需要对它们进行阴影处理以防图片与 textview 的颜色相同

更新:

正如评论所建议的那样,我现在使用了这样的线性布局,但现在文本视图之间存在非常小的间隙,而 ConstraintLayout 则没有。知道如何解决吗?

<androidx.appcompat.widget.LinearLayoutCompat
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    android:layout_marginEnd="10dp">

    <TextView
        android:id="@+id/tv1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@drawable/bg_overlay_top"
        android:paddingStart="6dp"
        android:paddingTop="6dp"
        android:paddingEnd="6dp"
        android:text="TextView1"
        android:textColor="?colorOnPrimary"
        android:textSize="13sp"/>

    <TextView
        android:id="@+id/tv2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginBottom="14dp"
        android:background="@drawable/bg_overlay_bottom"
        android:paddingStart="6dp"
        android:paddingEnd="6dp"
        android:paddingBottom="6dp"
        android:text="TextVie2 long"
        android:textColor="?attr/colorOnPrimary"
        android:textSize="16sp"
        android:textStyle="bold"/>

</androidx.appcompat.widget.LinearLayoutCompat>

更新 2

我现在使用完整的图像作为线性布局的背景,但遗憾的是这个解决方案也不起作用,线性布局只限制了下方的文本视图,这意味着如果下方比上方短,则上面的被截断了

如果您使用的是约束布局,那么 app:layout_constraintStart_toStartOf

会为您工作,使用 baseline 也会非常有用。

如果您使用的是垂直 LinearLayout,则可以将 android:layout_width(TextView 的)设置为“match_parent”而不是“wrap_content”。

编辑:在外部垂直 LinearLayout 中放置另一个 android:layout_width="wrap_content" 的垂直 LinearLayout 和 android:layout_width="match_parent" 的 2 个 TextView

对于你说的大蓝色背景,你可以使用垂直的LinearLayout作为两个TextView的容器,并将其背景颜色设置为蓝色。

以下是如何让两个 TextViews 具有相同的宽度,而不管哪个视图的文本较长。

<androidx.constraintlayout.widget.ConstraintLayout 
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <TextView
        android:id="@+id/textView1"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:background="@android:color/darker_gray"
        android:text="Here is some long, long text."
        android:textSize="28sp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="@id/barrierEnd"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintWidth_min="wrap" />

    <TextView
        android:id="@+id/textView2"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:background="@android:color/darker_gray"
        android:gravity="center"
        android:text="Bottom"
        android:textSize="28sp"
        app:layout_constraintEnd_toEndOf="@id/barrierEnd"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/textView1"
        app:layout_constraintWidth_min="wrap" />

    <androidx.constraintlayout.widget.Barrier
        android:id="@+id/barrierEnd"
        android:layout_width="0dp"
        android:layout_height="0dp"
        app:barrierDirection="end"
        app:constraint_referenced_ids="textView1,textView2"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

</androidx.constraintlayout.widget.ConstraintLayout>

此解决方案借鉴自 . I took a stab at explaining why it works