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