Простой дочерний макет ограничения с максимальной шириной в RecyclerView - PullRequest
0 голосов
/ 08 октября 2019

Я пытаюсь создать TextView таким образом, чтобы он оборачивал содержимое до максимальной ширины. Следующий вид кода достигает этого, пока он не будет использован в RecyclerView. Кажется, TextView не измеряет ширину после того, как я изменил текст в onBindViewHolder().

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

    <TextView
        android:id="@+id/message"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintWidth_max="wrap"
        app:layout_constraintWidth_default="percent"
        app:layout_constraintWidth_percent="0.72" />

</androidx.constraintlayout.widget.ConstraintLayout>

enter image description here




Однако обратите внимание, как это работаетхорошо, если я вызову requestLayout() на TextView в onBindViewHolder() ниже:

Обновление: Следующий код в onBindViewHolder() тоже работает.

ConstraintSet().apply {
    clone(holder.parent)
    applyTo(holder.parent)
}

parentбыть ConstraintLayout.

enter image description here

Кто-нибудь понимает, что здесь происходит? Это ошибка в ConstraintLayout? Вызывать requestLayout() в onBindViewHolder() - плохая практика, и я не хочу этого делать.

Ответы [ 2 ]

0 голосов
/ 08 октября 2019

Я думаю, что ваше мнение не перерисовывается во время процесса переработки. Проверьте, установлено ли у вас 'setHasFixedSize = true' для просмотра переработчика. Удалите это или сделайте это ложным. Если это все еще не работает, попробуйте изменить ширину TextView на wrap_content вместо 0dp.

0 голосов
/ 08 октября 2019

Я столкнулся с той же проблемой, и я решил ее, используя RelativeLayout и установив свойство android:maxWidth внутри TextView.

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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="wrap_content">

       <TextView
            android:id="@+id/textViewChat"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:autoLink="all"
            android:gravity="start"
            android:linksClickable="true"
            android:maxWidth="256dp"
            android:padding="8dp"
            android:textColor="@color/black"
            android:textSize="14sp" />
</RelativeLayout>
...