Android: TextView автоматически обрезает и заменяет последние 3 символа строки

131

Если a Stringдлиннее, чем TextViewширина, он автоматически переносится на следующую строку. Я могу избежать этого, используя android:singleLine(устарело) или установив android:inputType="text". Что мне сейчас нужно, так это что-то, что заменяет последние 3 символа моего Stringна " ... ". Поскольку я не использую моноширинный шрифт, он всегда будет отличаться в зависимости от букв, используемых в моем String. Итак, мне интересно, как лучше всего получить последние 3 символа String в a TextViewи заменить их. Возможно, что-то уже реализовано в платформе Android, поскольку это, должно быть, обычная проблема.

znq
источник

Ответы:

290

Вы должны иметь возможность использовать свойство "ellipsize" текстового представления:

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/text_mytext"
    android:ellipsize="end"
    android:maxLines="1"
/>

Вам также может потребоваться применить значения гравитации к макету; Иногда я видел виды с автоматическим растягиванием без них.

Nate
источник
Отлично. Спасибо. Я пробовал это раньше, но не сработало, потому что я использовал android: inputType = "text" вместо android: singleLine = "true" (который, как предполагается, устарел). Но теперь я остановлюсь на android: singleLine = "true". Большое спасибо.
znq 03
44
Он по-прежнему не добавляет "...". Для меня на этот вопрос нет полного ответа! Этот ответ сделает «короткое очень длинное слово» просто «коротким», а не «коротким очень длинным ...» Вдобавок вы, ребята, предлагаете использовать устаревший атрибут.
OneWorld,
7
Отлично работает, однако singleLine устарел, поэтому вы должны использовать вместо него maxLines = "1". Примечание: многоточие работает и с несколькими линиями!
Торре Ласли
4
singleLine устарел. Используйте maxLines = "1". просто комментарий к старому ответу
Ewoks
1
MaxLine = 1 обрежет текстовое поле посередине. SingleLine = True работает должным образом.
Snake
33

Нашел интересное решение этой проблемы.

maxLines=1
ellipsize=end
scrollHorizontally=true

Уловка заключается в том, что последнее утверждение о горизонтальной прокрутке… проверьте это. По крайней мере, он работает на v2.2.

BonanzaDriver
источник
Интересно ... полезно знать. Спасибо Марко за предупреждение.
BonanzaDriver
4

Программно вы можете использовать:

TextView tx = new TextView(this);
tx.setTextSize(13);
tx.setGravity(Gravity.CENTER);
tx.setTop(90);
tx.setText("Long text here");
tx.setTextColor(Color.BLACK);
tx.setSingleLine(true);
tx.setEllipsize(TruncateAt.END);
xevser
источник