Android добавить «...» в конце textview _EDIT

1

У меня есть вид lsit и я, что мне нужно добавить текст. в адаптере, мне нужно добавить... в конце, и я использовал следующие когда я даю

android:ellipsize="end"

в единственной строке отображается строка 2 например:
asdnfsdfdsf asdfsdfasdf
sdfsd sdfsdf sdfsd ad...

И когда я даю

android:ellipsize="start"

это как:
asdnfsdfdsf asdfsdfasdfd
... sdfsd sdfsdf sdfsd ad

Полный код, который я использовал:

<TextView  android:layout_width="wrap_content" android:background="#016A7D"

   android:layout_height="80dp" android:textColor="#000000"

    android:maxLines="4"          

    android:id="@+id/list_report_desciption" 

    android:ellipsize="end"

/" > И я получил результат:

Что именно умная планета
выглядит как? Как меняется ИТ? A...

на самом деле он содержит более 6 строк
Есть ли что-то, что мне нужно установить, чтобы мне нужно было 3 строки
Спасибо

  • 0
    Может быть, 80dp для высоты макета не достаточно для 3 строк текста. Попробуйте что-то вроде 200 dp, чтобы увидеть, получите ли вы 4 или 5 линий, а затем обрежьте его до желаемой высоты, чтобы было 3 линии. Не совсем элегантно, поэтому я не буду публиковать его как ответ.
  • 0
    Я тоже это попробовал :-(
Теги:
listview
append

4 ответа

0
Лучший ответ

Ничего не сработало для меня:-( Я просто фиксировал длину. Вырежьте строку этой длины и добавьте "..." после этого.
Теперь он работает на меня.

2

Текстовая эллипсизация кажется ошибочной, приближаясь к этому отчету: http://code.google.com/p/android/issues/detail?id=10554

Обходной путь позволяет эллипсировать одну строку текста, установив для атрибута android:singleLine значение true. Но этот атрибут устарел.

0

Решение, которое вы приняли, не будет правильно масштабироваться на всех устройствах.

Причина: ширина "a" меньше, чем "A", поэтому, если вы обрезаете строку на основе некоторого размера (например, 15 букв) и добавляете "..." через код, Вы можете увидеть, что результаты не ожидаются.

Теперь приступим к решению: -

Решения:

Решение №1: Добавьте в свой TextView следующие 3 атрибута, и вы получите нужный результат:)

<TextView
    android:ellipsize="end"
    android:lines="1"
    android:scrollHorizontally="true" />

Решение № 2: Другим обходным решением может быть, вы можете решить выделить текст (фантастическая анимация, перемещающая ваш текст справа налево). Для этого вам нужны следующие атрибуты в TextView xml: -

<TextView
    android:id="@+id/my_text_view"
    android:ellipsize="marquee"
    android:lines="1"
    android:scrollHorizontally="true"
    android:marqueeRepeatLimit="marquee_forever" />

И затем в вашем коде вам нужно получить TextView по его идентификатору и вставить следующую строку: -

TextView myTextView = (TextView) findViewById(R.id.my_text_view);
myTextView.setSelected(true);

#### Изменить: - ####

Я просто понял, что для моего решения для работы в версиях android больше 2.3.x нам нужно добавить следующую строку в наш TextView xml: -

    android:singleLine="true"

Хотя это устаревший атрибут, но вы должны добавить это, иначе marquee или "..." не будут работать.

Надеюсь, что это ответит на вопрос:)

0

Я искал для себя простое решение для себя, у меня получилось что-то вроде:

private String getTextWithMoreIndicator(TextView textView, String text) {

    long maxVisibleChars = textView.getPaint().breakText(text, true, textView.getMeasuredWidth(), null);

    if(maxVisibleChars < text.length()) {
        text = text.substring(0, (int)maxVisibleChars -3) + "..."; 
    }

    return text;
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню