如何在ConstraintLayout中将两个TextViews水平对齐而不重叠?

时间:2018-07-11 20:58:31

标签: android android-constraintlayout

我试图像这样水平对齐两个TextView: Text A Short Correct 当文本A短时,我当前的布局工作正常。但是,当为textA设置长字符串时,情况会中断,如下所示。即使文本A的末尾约束到文本B的开头,文本A和文本B也重叠。 Text A Long Overlapping

这是当文本A很长时的外观。 Text A Long Correct


当前XML

<?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:layout_width="match_parent"
    android:layout_height="match_parent"
    android:padding="8dp">

    <TextView
        android:id="@+id/textA"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="@drawable/rounded_gray_background"
        android:ellipsize="end"
        android:lines="1"
        android:padding="4dp"
        android:text="Text A"
        app:layout_constraintEnd_toStartOf="@id/textB"
        app:layout_constraintHorizontal_bias="0"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <TextView
        android:id="@+id/textB"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:padding="4dp"
        android:text="Text B"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

</android.support.constraint.ConstraintLayout>

3 个答案:

答案 0 :(得分:2)

您需要将app:layout_constrainedWidth="true"属性添加到textA TextView中,以在将宽度设置为wrap_content的同时实施约束:

<?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:layout_width="match_parent"
    android:layout_height="match_parent"
    android:padding="8dp">

    <TextView
        android:id="@+id/textA"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="@drawable/rounded_gray_background"
        android:ellipsize="end"
        android:lines="1"
        android:padding="4dp"
        android:text="Text A"
        app:layout_constrainedWidth="true"
        app:layout_constraintEnd_toStartOf="@id/textB"
        app:layout_constraintHorizontal_bias="0"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <TextView
        android:id="@+id/textB"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:padding="4dp"
        android:text="Text B"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

</android.support.constraint.ConstraintLayout>

答案 1 :(得分:1)

尝试一下:

<?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:layout_width="match_parent"
    android:layout_height="match_parent"
    android:padding="8dp">

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <TextView
            android:id="@+id/textA"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:background="@drawable/rounded_gray_background"
            android:ellipsize="end"
            android:lines="1"
            android:padding="4dp"
            android:text="Text A"
            app:layout_constraintEnd_toStartOf="@id/textB"
            app:layout_constraintHorizontal_bias="0"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent"/>

        <TextView
            android:id="@+id/textB"
            android:layout_height="wrap_content"
            android:layout_width="wrap_content"
            android:padding="4dp"
            android:text="Text B"
            android:layout_toRightOf="@id/textA"/>

    </RelativeLayout>

</android.support.constraint.ConstraintLayout>

答案 2 :(得分:0)

只需添加第二个文本视图app:layout_constraintStart_toEndOf="@id/textA"即可移至文本视图A的右侧。 更改textB如下:

<TextView
    android:id="@+id/textB"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:padding="4dp"
    android:text="Text B"
    app:layout_constraintStart_toEndOf="@id/textA" />