Как я могу отображать эллипсы в моем TextView, если он больше 1 строки?

100

У меня не работает следующий макет:

<LinearLayout 
    android:orientation="horizontal" 
    android:layout_width="match_parent" 
    android:id="@+id/experienceLayout" 
    android:background="#ffffff" 
    android:layout_height="match_parent" 
    android:paddingLeft="6dp" 
    android:paddingRight="6dp" 
    android:paddingBottom="6dp" 
    android:paddingTop="6dp">

    <TextView 
        android:layout_weight="1" 
        android:id="@+id/experienceLabel" 
        android:text="Experience" 
        android:layout_height="wrap_content" 
        android:textColor="#000000" 
        android:layout_width="wrap_content" 
        android:textStyle="bold">
    </TextView>

    <TextView 
        android:id="@+id/experienceTextView" 
        android:text="TextView" 
        android:layout_height="wrap_content" 
        android:textColor="#000000" 
        android:layout_width="wrap_content" 
        android:ellipsize="end" 
        android:lines="1" 
        android:maxLines="1" 
        android:singleLine="true" 
        android:fadeScrollbars="false">
    </TextView>

</LinearLayout>
Шихан Алам
источник

Ответы:

287

Это распространенная проблема. Попробуйте использовать следующее:

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

.............. scrollHorizontally - это "особый соус", который заставляет его работать.

BonanzaDriver
источник
12
Странно ... Я пробовал, android:scrollHorizontally="true"но не получилось, пришлось использовать устаревший атрибут android:singleLine="true".
Gerardo Contijoch
1
да, scrollHorizontallyэто настоящий ключ к...
Ришаб Датт Шарма
scrollHorizontally? очевидно, мне не нужен эффект горизонтальной прокрутки.
filthy_wizard
@ user1232726: Да, "прокручивать по горизонтали". Исходя из здравого смысла, взгляните на дату вопроса и дату ответов ... само собой разумеется, что ни один из них не может быть актуальным в настоящее время (перед тем, как комментировать).
BonanzaDriver
Использование ellipsize с maxLines может привести к сбою приложения - Отчет Android Studio intellisense
Вайшнав Мхетре
34

Это также сделает одну линию с многоточием

 android:singleLine="true"
Атул Бхардвадж
источник
15
По-видимому, это устарело
Оливер Пирмейн 05
1
Этот лучше ломает длинные слова.
bpiec
android: maxLines = "1"
Jaydev 08
1
@grebulon Это устарело. По крайней мере сейчас.
Spikatrix
25

Использовать это

android:ellipsize="end"  
android:singleLine="true"

Не используйте это, не зная полностью, какой результат

android:ellipsize="end"  
android:maxLines="1"

Когда вы используете, maxlines = 1он со временем обрежет большинство символов.

Мохамед Ибрагим
источник
13

То, как это работало для меня на нескольких устройствах / API, было программно таким (где tv - ваш TextView):

    if (tv.getLineCount() > 1) {
        int lineEndIndex = tv.getLayout().getLineEnd(0);
        String text = tv.getText().subSequence(0, lineEndIndex - 3) + "\u2026";
        tv.setText(text);
    }
Марилия
источник
2
Это самый полезный ответ из всех ... работает с каждым API и может быть легко преобразован в библиотеку Utils.
Мариано Соррилья,
1
Вы должны использовать символ многоточия \u2026вместо трех .символов
Крис Стиллвелл
Вы правы, @ChrisStillwell, и я использую в своем коде символ многоточия. Я отредактировал ответ, спасибо. :)
Марилия
3

Таким образом, все приведенные выше ответы соответствуют требованию, чтобы отображалась только 1 строка, а затем многоточие. Однако, если вы хотите, чтобы многоточие появлялось после определенных строк текста, вам следует использовать следующее:

android:ellipsize="end"
android:maxLines="2"
android:singleLine="false"

При этом многоточие появится только после 2 строк. Примечание. Важно, чтобы для singleLine было установлено значение false.

SDK4551
источник
Значение по умолчанию - false согласно документации: developer.android.com/reference/android/widget/…
Пьер,
-1

android:singleLineустарела. В моем случае мне нужно было получить фиксированную высоту для, TextViewи я использовал android:linesатрибут вместо android:maxLines. Я подумал, что это может помочь кому-то, у кого такая же проблема, как у меня.

android:ellipsize="end"
android:lines="2"
Реаз Муршед
источник
Не правда. В документации ничего не говорится об устаревании: developer.android.com/reference/android/widget/…
cesards
@cesards Интересно. В этом документе говорится, что это - developer.android.com/reference/android/R.attr.html#singleLine
Реаз Муршед,