¿Cómo puedo mostrar puntos suspensivos en mi TextView si es mayor que 1 línea?


100

Tengo el siguiente diseño que no funciona:

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

Respuestas:


286

Este es un problema común. Intente usar lo siguiente:

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

.............. el scrollHorizontally es la "salsa especial" que lo hace funcionar.


12
Extraño ... Lo intenté android:scrollHorizontally="true"pero no funcionó, tuve que usar el atributo obsoleto android:singleLine="true".
— Gerardo Contijoch

1
sí scrollHorizontallyes la clave real para...
— Rishabh Dutt Sharma

scrollHorizontally? obviamente no quiero un efecto de desplazamiento horizontal.
— filthy_wizard

@ user1232726: Sí, "desplazarse horizontalmente". Como cuestión de sentido común, eche un vistazo a la fecha de la pregunta y la fecha de las respuestas ... no hace falta decir que ninguna de las dos podría ser actualmente relacionada (antes de comentar).
— BonanzaDriver

El uso de ellipsize con maxLines podría bloquear la aplicación - Informe de Android Studio intellisense
— Vaishnav Mhetre


25

Utilizar este

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

No use esto sin estar completamente consciente de lo que viene

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

Cuando lo use maxlines = 1, en algún momento truncará la mayoría de los caracteres.


12

La forma en que funcionó para mí en múltiples dispositivos / API fue programáticamente así (donde tv es su TextView):

    if (tv.getLineCount() > 1) {
        int lineEndIndex = tv.getLayout().getLineEnd(0);
        String text = tv.getText().subSequence(0, lineEndIndex - 3) + "\u2026";
        tv.setText(text);
    }

2
Esta es la respuesta más útil de todas ... funciona en todas las API y se puede convertir fácilmente como una biblioteca de Utils.
— Mariano Zorrilla

1
Debe utilizar el carácter de puntos suspensivos en \u2026lugar de los tres .caracteres
— Chris Stillwell

Tienes razón @ChrisStillwell y utilizo el carácter de puntos suspensivos en mi código. He editado la respuesta, gracias. :)
— Marilia

3

Entonces, todas las respuestas anteriores satisfacen el requisito de que solo aparezca una línea y luego la elipsis. Sin embargo, si desea que aparezcan puntos suspensivos después de ciertas líneas de texto, debe utilizar lo siguiente:

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

Con esto, la elipsis aparecerá solo después de 2 líneas. Nota: Es importante tener singleLine como falso.


El valor predeterminado es falso según la documentación: developer.android.com/reference/android/widget/…
— Pierre


-1

android:singleLinees obsoleto. En mi caso, tuve que obtener una altura fija para el TextViewy usé el android:linesatributo en lugar de android:maxLines. Pensé que esto podría ayudar a alguien que tenga el mismo problema que el mío.

android:ellipsize="end"
android:lines="2"

No es verdad. La documentación no dice nada sobre la desaprobación: developer.android.com/reference/android/widget/…
— cesards

@cesards Interesante. Este documento dice que es - developer.android.com/reference/android/R.attr.html#singleLine
— Reaz Murshed
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.