¿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>
Sheehan Alam
fuente

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.

BonanzaDriver
fuente
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
34

Esto también hará una sola línea con elipsise

 android:singleLine="true"
Atul Bhardwaj
fuente
15
Esto aparentemente está desaprobado
Oliver Pearmain
1
Este mejor rompe palabras largas.
bpiec
android: maxLines = "1"
Jaydev
1
@grebulon Está en desuso. Al menos ahora.
Spikatrix
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.

Mohamed Ibrahim
fuente
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);
    }
Marilia
fuente
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.

SDK4551
fuente
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"
Reaz Murió
fuente
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