ConstraintLayout — начало с многоточием не работает

#android #android-constraintlayout

#Android #android-constraintlayout

Вопрос:

Использование ellipsize start в ConstraintLayout резко сокращает текст в конце. Я упоминаю, что я ограничил представление как в начале, так и в конце.

Когда я переключаюсь на конец многоточия, он работает нормально.

Я также замечаю, что на экране предварительного просмотра Android Studio текст размещен правильно, но во время выполнения он обрезается в конце.

У него есть известная проблема по этому поводу? Или я делаю что-то не так?

Это код, который я использую в XML:

 <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="wrap_content">

    <ImageView
        android:id="@ id/location"
        android:layout_width="24dp"
        android:layout_height="24dp"
        android:layout_marginStart="4dp"
        android:layout_marginTop="4dp"
        android:layout_marginBottom="@dimen/small_margin"
        android:alpha="0.38"
        android:contentDescription="@string/location"
        android:src="@drawable/ic_location"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:tint="@color/material_on_surface_disabled" />

    <TextView
        android:id="@ id/area"
        style="?attr/textAppearanceCaption"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginEnd="@dimen/small_margin"
        android:layout_marginBottom="@dimen/small_margin"
        android:ellipsize="start"
        android:singleLine="true"
        app:layout_constrainedWidth="true"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toEndOf="@id/location"
        tools:ignore="RtlSymmetry"
        tools:text="Long string, very long string that should be longer than the screen size, this is very long" />

</androidx.constraintlayout.widget.ConstraintLayout>
  

Комментарии:

1. Чего вы пытаетесь достичь? Иметь […] как в начале, так и в конце, верно?

2. Нет, я только хочу иметь […] при запуске

3. Хорошо, пожалуйста, попробуйте ответить, @Ninjinski

Ответ №1:

Чтобы иметь многоточие в конце, попробуйте

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

Чтобы иметь многоточие при запуске, попробуйте

 android:ellipsize="start"
android:singleLine="true"
  

Комментарии:

1. Я хочу использовать многоточие при запуске, и у меня уже есть эта настройка, она не работает.

2. Пожалуйста, удалите строку `приложение: layout_constrainedWidth =»true»» и попробуйте

3. С моей стороны, он отображается нормально. Настройте android:layout_width на некоторый постоянный размер 100dp или около того и проверьте. Согласно документу Google, [вы должны использовать приведенный выше атрибут layout_constrainedWidth / Height вместе с width=wrap_content .]

4. Я больше не использую constrainedWidth, когда я устанавливаю текстовое представление с фиксированным размером (отличным от 0dp), представление центрируется, что нормально, но я сталкиваюсь с той же проблемой

Ответ №2:

Отвечая на мой собственный вопрос здесь

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

Я обнаружил, что проблема не в ConstraintLayout, а в стиле шрифта. По-видимому, какой-то стиль шрифта вызывает android:ellipsize="start" (или даже средний) ошибку

Вы можете просто использовать android:layoutWidth="0dp" with android:singleLine="true" на TextView (я знаю, что он устарел, но кажется, что maxLines может привести к сбою) и удалить стиль шрифта или найти тот, который работает.

Мне любопытно узнать, почему это происходит, если у кого-то есть идея