ConstraintLayout устанавливает приоритет усечения текстового представления - PullRequest
0 голосов
/ 05 сентября 2018

Я пытаюсь сделать конкретное текстовое представление усеченным, когда оно занимает максимум места Вот пример ситуации с макетом, который у меня есть:

|| [TextView 1] [TextView 2] [ImageView] ||

Эта горизонтальная цепочка существует в ячейке, которая имеет статическую ширину. Первый TextView имеет статический текст, а значок просмотра изображения имеет статический размер, в то время как второй TextView имеет переменную ширину. Я связал их вместе и установил ограничения соответствующим образом.

Моя проблема заключается в том, что когда TextView 2 становится слишком длинным, он выталкивает ImageView из ячейки, даже если ограничение ImageView установлено для родительского элемента. Я хочу, чтобы, когда TextView 2 становился слишком длинным, он усекался, оставляя значок в пределах родительского элемента. Есть ли способ, которым я могу заставить левый край ImageView выступать в качестве границы, которую TextView 2 должен соблюдать, когда ImageView достигает конца родительского элемента?

Edit:

Вот простой пример моего xml. Я также думаю, что стоит отметить, что XML-код макета ниже вводится в другой макет с помощью тега include. Родитель xml ниже имеет свои размеры, равные match-parent, а макет, в который он вводится, устанавливает размеры для статической ширины и высоты.

    <TextView
        android:id="@+id/title"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Title"
        bind:layout_constraintLeft_toLeftOf="parent"
        bind:layout_constraintRight_toLeftOf="@id/info"
        bind:layout_constraintBottom_toBottomOf="parent"
        bind:layout_constraintHorizontal_chainStyle="packed"/>

    <TextView
        android:id="@+id/info"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="4dp"
        android:text="@{viewModel.info}"
        bind:layout_constraintLeft_toRightOf="@id/title"
        bind:layout_constraintRight_toLeftOf="@id/icon"
        bind:layout_constraintBottom_toBottomOf="@id/title"/>

    <ImageView
        android:id="@+id/icon"
        android:layout_width="12dp"
        android:layout_height="12dp"
        android:src="@drawable/icon"
        android:layout_marginLeft="4dp"
        bind:layout_constraintLeft_toRightOf="@id/info"
        bind:layout_constraintBottom_toBottomOf="@id/info"
        bind:layout_constraintTop_toTopOf="@id/info"
        bind:layout_constraintRight_toRightOf="parent"/>

1 Ответ

0 голосов
/ 05 сентября 2018

Установить app:layout_constrainedWidth="true" атрибут для второго TextView. Это будет применять ограничения, даже если ширина TextView's равна wrap_content.

Если вы также хотите, чтобы он оставался в пределах одной строки и имел размер эллипса в конце при достижении максимальной ширины, добавьте:

android:maxLines="1"
android:ellipsize="end"
...