Как исправить переполнение текста TextView с отступом android:ellipsize=marquee

На некоторых устройствах Android (LG Google Nexus 5 с Android L и M) TextView с android:ellipsize="marquee" и padding приводит к тому, что текст переполняет текстовое представление. Однако это происходит с правой стороны, но не с левой стороны TextView, в то время как отступ применяется как к левой, так и к правой стороне.

скриншот

Это не происходит на Samsung Galaxy S3 и S6 с Android K и L соответственно.

<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="1dp"
android:paddingTop="2dp"
android:paddingBottom="2dp"
android:paddingLeft="4dp"
android:paddingRight="4dp"
android:singleLine="true"
android:ellipsize="marquee"
android:marqueeRepeatLimit="marquee_forever"
android:scrollHorizontally="true"
android:freezesText="true"
android:alpha="0.85"
android:background="@color/by433_gray_darker"
android:textColor="@color/white"
android:textSize="11sp" />

Что я могу сделать, чтобы исправить или обойти это?


person Wojtek Dmyszewicz    schedule 18.11.2015    source источник


Ответы (1)


Ваша проблема связана с ошибкой Android и уже зарегистрирован и назначен в проекте Android с открытым исходным кодом:

Ваш обходной путь может выглядеть так:

<FrameLayout android:layout_width="match_parent"
             android:layout_height="wrap_content"
             android:paddingTop="2dp"
             android:paddingBottom="2dp"
             android:paddingLeft="4dp"
             android:paddingRight="4dp"
             android:layout_marginBottom="1dp"
             android:background="@color/by433_gray_darker">
    <TextView
        android:id="@+id/textId"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:singleLine="true"
        android:ellipsize="marquee"
        android:marqueeRepeatLimit="marquee_forever"
        android:scrollHorizontally="true"
        android:freezesText="false"
        android:alpha="0.85"
        android:text="super nice text text text text text text text text text text text text text text text text text"
        android:textColor="@color/white"
        android:textSize="11sp" />
</FrameLayout>

Итак, идея состоит в том, чтобы иметь контейнер-оболочку с отступами, полями и фоном. (Это не должно сильно влиять на производительность, если у вас есть только пара таких представлений)


Исходный неверный ответ (хотя было два TextView). Проблема может быть связана с комбинацией стольких атрибутов в вашем TextView. Вот несколько предложений:

  1. Сначала попробуйте удалить атрибут один за другим, проверяя результат
  2. Вы можете попробовать указать отступы в своем контейнере вместо текстовых представлений.
  3. Из вашего макета кажется, что вы можете попробовать что-то подобное вместо «match_parent» в своих текстовых представлениях:

    <LinearLayout android:orientation="horizontal" ...>
        <TextView android:layout_width="0dp" android:layout_weight="1" ... />
        <TextView android:layout_width="0dp" android:layout_weight="1" ... />
    </LinearLayout>
    
person GregoryK    schedule 22.12.2015
comment
Спасибо, Грегори, но у меня нет времени проверять прямо сейчас, но если никто другой не ответит менее чем за 5 дней, я дам вам награду.. иначе награда исчезнет: P .. 'но для пока остается главный вопрос.. почему это не происходит на Samsung Galaxy S3 и S6 с Android K и L. - person Wojtek Dmyszewicz; 24.12.2015
comment
@WojtekDmyszewicz хотел поделиться некоторыми идеями о том, как начать исправлять/обходить это. Посмотрю на это немного больше, если вы можете предоставить проблемный код кода (я имею в виду контейнер + текстовые представления) - person GregoryK; 24.12.2015
comment
зачем давать награду, если на вопрос нет ответа? Текстовое представление находится внутри linearlayout (с текстовым представлением заголовка), которое выровнено по нижней части родительского (относительного) макета. Суть вопроса: почему это переполнение происходит с одной стороны, на некоторых устройствах вообще. Пожалуйста, докажите, что решение 3 будет работать. - person Jesse van Muijden; 24.12.2015
comment
@JessevanMuijden, кажется, я неправильно понял проблему). Думал, что у Войтека было два текстовых представления. Обновлю свой ответ в ближайшее время. - person GregoryK; 24.12.2015