Как я могу показать эллипсы на моем TextView, если он больше, чем 1 строка? - PullRequest
84 голосов
/ 18 июня 2011

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

<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>

Ответы [ 5 ]

260 голосов
/ 18 июня 2011

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

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

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

29 голосов
/ 21 декабря 2012

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

 android:singleLine="true"
17 голосов
/ 22 февраля 2016

Используйте это

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

Не используйте это, не зная полностью, что выводит

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

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

11 голосов
/ 19 сентября 2015

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

    if (tv.getLineCount() > 1) {
        int lineEndIndex = tv.getLayout().getLineEnd(0);
        String text = tv.getText().subSequence(0, lineEndIndex - 3) + "\u2026";
        tv.setText(text);
    }
2 голосов
/ 24 января 2019

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

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

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

...