Android добавить «...» в конце textview _EDIT - PullRequest
1 голос
/ 26 октября 2010

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

android:ellipsize="end"

только в строке 2 показывает, например:
asdnfsdfdsf asdfsdfasdf
sdfsd sdfsdf sdfsdобъявление ...

И когда я даю

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 строки
Спасибо

Ответы [ 4 ]

2 голосов
/ 26 октября 2010

Многоточие текста выглядит некорректно, согласно этому отчету: http://code.google.com/p/android/issues/detail?id=10554

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

0 голосов
/ 27 мая 2013

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

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

Теперь перейдем к решению: -

Решения:

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

<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 голосов
/ 07 октября 2011

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

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;
}
0 голосов
/ 08 ноября 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...