Android: что-то лучше, чем android:ellipsize="end", чтобы добавить "..." к усеченным длинным строкам?

отель делает

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

to

"короткое и"

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

" короткий и очень-Лон..."

прямо сейчас я усекаю строку в коде 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 ответов


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

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

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


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

android:singleLine="true"

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

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


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


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

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