ConstraintLayout会截断TextView中过长的文本

4

我正在尝试制作一个主从视图,我有一个ListView,其中的项目具有以下布局:

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <TextView
        android:id="@+id/tv_from"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="8dp"
        android:text="@string/start_point"
        app:layout_constraintStart_toStartOf="@+id/tv_date"
        app:layout_constraintTop_toBottomOf="@+id/tv_date_val" />

    <TextView
        android:id="@+id/tv_to_vall"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:text="@string/end_point"
        android:textSize="18sp"
        android:baselineAligned="false"
        app:layout_constraintBaseline_toBaselineOf="@+id/tv_to"
        app:layout_constraintStart_toStartOf="@+id/tv_from_vall" />

    <TextView
        android:id="@+id/tv_to"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="8dp"
        android:text="@string/end_point"
        app:layout_constraintStart_toStartOf="@+id/tv_from"
        app:layout_constraintTop_toBottomOf="@+id/tv_from_vall" />

    <TextView
        android:id="@+id/tv_from_vall"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="16dp"
        android:layout_marginLeft="16dp"
        android:gravity="center"
        android:text="@string/start_point"
        android:textSize="18sp"
        app:layout_constraintBottom_toBottomOf="@+id/tv_from"
        app:layout_constraintStart_toEndOf="@+id/tv_from"
        app:layout_constraintTop_toTopOf="@+id/tv_from" />

    <TextView
        android:id="@+id/tv_date"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="16dp"
        android:layout_marginLeft="16dp"
        android:text="@string/date"
        app:layout_constraintBaseline_toBaselineOf="@+id/tv_date_val"
        app:layout_constraintStart_toStartOf="parent" />

    <TextView
        android:id="@+id/tv_date_val"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="8dp"
        android:gravity="center"
        android:text="@string/date"
        android:textSize="18sp"
        app:layout_constraintStart_toStartOf="@+id/tv_from_vall"
        app:layout_constraintTop_toTopOf="parent" />

</androidx.constraintlayout.widget.ConstraintLayout>

生成的图像为: enter image description here

右侧列表项的最后两行文本被截断,如果文本过长我希望进行换行。

我尝试了android:lines="4", android:singleLine = "false"

在不改变整个布局的情况下,是否有一种方法可以在TextView中修复它?

2个回答

5
您需要进行修改。
  1. Change right text view width with 0dp. You are using wrap_content and because of that this issue generate.
  2. Change top to bottom constraint to all right textview, because when text increase it will overlap in your constraint.

    enter image description here

    <?xml version="1.0" encoding="utf-8"?>
    <androidx.constraintlayout.widget.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">
    
    <TextView
        android:id="@+id/tv_date"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="16dp"
        android:layout_marginLeft="16dp"
        android:text="date"
        app:layout_constraintBaseline_toBaselineOf="@+id/tv_date_val"
        app:layout_constraintStart_toStartOf="parent" />
    
    <TextView
        android:id="@+id/tv_date_val"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginTop="8dp"
        android:gravity="start"
        android:text="date text date text date text date text date text date text date text date text"
        android:textSize="18sp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="@+id/tv_from_vall"
        app:layout_constraintTop_toTopOf="parent" />
    
    <TextView
        android:id="@+id/tv_from"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="8dp"
        android:text="start_point"
        app:layout_constraintStart_toStartOf="@+id/tv_date"
        app:layout_constraintTop_toTopOf="@+id/tv_from_vall" />
    
    <TextView
        android:id="@+id/tv_from_vall"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginStart="16dp"
        android:layout_marginLeft="16dp"
        android:layout_marginTop="8dp"
        android:gravity="start"
        android:text="start_point start_point start_point start_point start_point start_point start_point"
        android:textSize="18sp"
        app:layout_constraintEnd_toEndOf="@+id/tv_date_val"
        app:layout_constraintStart_toEndOf="@+id/tv_from"
        app:layout_constraintTop_toBottomOf="@+id/tv_date_val" />
    
    <TextView
        android:id="@+id/tv_to"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="8dp"
        android:text="end_point"
        app:layout_constraintStart_toStartOf="@+id/tv_from"
        app:layout_constraintTop_toBottomOf="@+id/tv_from_vall" />
    
    <TextView
        android:id="@+id/tv_to_vall"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:baselineAligned="false"
        android:gravity="start"
        android:text="end_point end_point end_point end_point end_point end_point end_point"
        android:textSize="18sp"
        app:layout_constraintBaseline_toBaselineOf="@+id/tv_to"
        app:layout_constraintEnd_toEndOf="@+id/tv_date_val"
        app:layout_constraintStart_toStartOf="@+id/tv_from_vall" />
    
    </androidx.constraintlayout.widget.ConstraintLayout>
    

4
你可以通过以下方法解决这个问题:
  1. 对每个 TextView 使用 match constraints 宽度,而不是使用 wrap_content
  2. 在父布局的结尾添加一个约束条件:app:layout_constraintEnd_toEndOf="parent"
因此,你的布局将会是这样的:
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <TextView
        android:id="@+id/tv_from"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="8dp"
        android:text="@string/start_point"
        app:layout_constraintStart_toStartOf="@+id/tv_date"
        app:layout_constraintTop_toBottomOf="@+id/tv_date_val" />

    <TextView
        android:id="@+id/tv_to_vall"
        android:layout_width="0dp"
        android:layout_height="wrap_content"

        android:gravity="center"
        android:text="@string/end_point"
        android:textSize="18sp"
        android:baselineAligned="false"
        app:layout_constraintBaseline_toBaselineOf="@+id/tv_to"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="@+id/tv_from_vall" />

    <TextView
        android:id="@+id/tv_to"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="8dp"
        android:text="@string/end_point"
        app:layout_constraintStart_toStartOf="@+id/tv_from"
        app:layout_constraintTop_toBottomOf="@+id/tv_from_vall" />

    <TextView
        android:id="@+id/tv_from_vall"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginStart="16dp"
        android:layout_marginLeft="16dp"
        android:gravity="center"
        android:text="@string/start_point"
        android:textSize="18sp"
        app:layout_constraintBottom_toBottomOf="@+id/tv_from"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toEndOf="@+id/tv_from"
        app:layout_constraintTop_toTopOf="@+id/tv_from" />

    <TextView
        android:id="@+id/tv_date"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="16dp"
        android:layout_marginLeft="16dp"
        android:text="@string/date"
        app:layout_constraintBaseline_toBaselineOf="@+id/tv_date_val"
        app:layout_constraintStart_toStartOf="parent" />

    <TextView
        android:id="@+id/tv_date_val"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginTop="8dp"
        android:gravity="center"
        android:text="@string/date"
        android:textSize="18sp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="@+id/tv_from_vall"
        app:layout_constraintTop_toTopOf="parent" />

</androidx.constraintlayout.widget.ConstraintLayout>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接