TextView 忽略较长文本和第二行的边界。如何解决这个问题?

问题描述 投票:0回答:3

这是一个包含两个文本视图的简单 ConstraintLayout 的代码。

经典聊天气泡。当我扩展“message_body”Textview 的文本长度时,一切都会按预期工作,直到父级到达其左边框(marginLeft=100dp)。

“消息正文”Textview 没有向第二行添加更多文本,而是在超出其边界的情况下持续扩展一段时间,并在最终进入下一行之前弄乱我的布局。我该如何解决这个问题,这真的让我发疯。

提前感谢这个伟大的社区!


<?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:id="@+id/myMessage"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="right"
    android:layout_marginLeft="100dp"
    android:layout_marginTop="4dp"
    android:layout_marginRight="4dp"
    android:background="@drawable/my_message">


    <TextView
        android:id="@+id/message_body"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="0dp"
        android:layout_marginEnd="0dp"
        android:elevation="0dp"
        android:gravity="left"
        android:padding="10dp"
        android:text="try make this text than one line"
        android:textColor="#fff"
        android:textSize="12dp"
        app:layout_constraintEnd_toStartOf="@+id/timestamp"
        app:layout_constraintStart_toStartOf="parent" />

    <TextView
        android:id="@+id/timestamp"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_toEndOf="@+id/message_body"
        android:elevation="0dp"
        android:padding="5dp"
        android:text="10:00"
        android:textColor="#fff"
        android:textSize="8dp"
        app:layout_constraintEnd_toEndOf="parent"
         />


</androidx.constraintlayout.widget.ConstraintLayout>

截图:

short_text

medium_still_good

now it chrashes left and right border

tried your advice but looks like this now

dmitris solution looks like this on my side atm

android textview constraints containers multiline
3个回答
1
投票

您的

TextView
缺少这些:

android:layout_width="0dp"
android:textAlignment="textEnd"

.

<TextView
        android:id="@+id/message_body"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginStart="0dp"
        android:layout_marginEnd="0dp"
        android:elevation="0dp"
        android:padding="10dp"
        android:text="try make this text than one line"
        android:textColor="#fff"
        android:textSize="12dp"
        android:textAlignment="textEnd"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintEnd_toStartOf="@id/timestamp" />

上面的代码应该可以解决您的问题,但我还建议您修复 Android Studio 为您突出显示的所有警告 - 添加 1 个垂直约束到

TextView
s


0
投票

尝试使用

android:layout_width="0dp"
,以便系统正确应用约束。


0
投票

我通过将 TextView 嵌套在 FrameLayout 中并将 FrameLayout 的宽度设置为 0dp 解决了这个问题。这允许 TextView 根据其内容 (wrap_content) 确定自己的宽度,如果超出父布局内的可用空间,它将换行为多行。

<FrameLayout
  android:layout_width="0dp"
  android:layout_height="wrap_content">

  <TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="This is a long text that will wrap to multiple lines if it overflows the available space." />

</FrameLayout>
© www.soinside.com 2019 - 2024. All rights reserved.