Android: Что-то лучше, чем Android: ellipsize = "end", чтобы добавить "..." в усеченные длинные строки? - PullRequest
43 голосов
/ 22 сентября 2010

Это свойство составляет

"короткое и очень длинное слово"

до

"короткий и"

. Но я хочу иметь что-л. как

"Короткий и очень длинный ..."

Прямо сейчас я усекаю строку в коде Java. Однако это зависит от количества символов, а не от фактической длины ссылки. Итак, результат не очень хороший.

String title;
    if(model.getOrganization().length() > 19) {
      title = model.getText().substring(0, 15).trim() + "…";
    } else {
      title = model.getText();
    }
    ((TextView) findViewById(R.id.TextViewTitle)).setText(title);

Обновление

Только что заметил, в некоторых случаях это свойство добавляет "...". Но не во всех из них:

12345678901234567890 становится "12345678901234 ..."

Однако

"1234567890 1234567890" становится "1234567890", а не "1234567890 123 ..."

Обновление 2

Теперь это действительно становится классным! Я просто установил singleLine = true и удалил maxLine (ошибка появляется с и без установки атрибута ellipsize) ...

alt text

Это снимок экрана с Motorola Milestone с обновлением Android 2.1 1. То же самое происходит в HTC Desire с той же версией Android

Обновление 3

Теперь я использую android: ellipsize = "marquee". Кажется, это единственная правильно работающая настройка. Это также только движется, когда сосредоточено. Я вижу это и во многих других приложениях. Я думаю, это обычная практика.

Ответы [ 4 ]

65 голосов
/ 12 июня 2012

Если это для одной строки, попробуйте это:

android:ellipsize="end"
android:maxLines="1"
android:scrollHorizontally="true"
android:singleLine="true"

Это сработало для меня.

24 голосов
/ 22 сентября 2010

У меня была похожая проблема, и установка этого свойства в TextView помогла:

android:singleLine="true"

Кроме того, я использовал RelativeLayout, поэтому я ограничил пространство, которое TextView мог занять, установив левое поле для кнопкисправа от TextView, так что текст не может расширяться дальше и вынужден обрезать его содержимое.

Возможно, это не решение вашей проблемы, но оно помогло мне в аналогичной ситуации.

1 голос
/ 23 января 2013

См. Мое обновление 3. В качестве обходного пути использовалось «marquee».Я видел много приложений, делающих это в это время.Теперь в новых версиях Android эта функция, скорее всего, исправлена ​​и будет работать как положено.(мое предположение)

1 голос
/ 22 сентября 2010

Может быть, вы могли бы взглянуть на то, как работает закрытый класс Ellipsizer , используемый ОС, и изменить его для вашего приложения?

Редактировать: вот рабочая ссылка - http://androidxref.com/5.1.0_r1/xref/frameworks/base/core/java/android/text/Layout.java#1830

...