2012-06-26 11 views
40

cuando estoy usando TextView con singleLine="true" y ellipsize="end" (mi top Vista de Texto), funciona bienConfiguración Ellipsize en TextView reduce las líneas mostradas por uno (en lugar de solamente ellipsizing pasado)

pero en otraTextView tener más de 1 línea (en mi caso, 3 líneas en la parte inferior TextView), lines="3" and maxLines="3" and ellipsize="end",no funciona correctamente.

Cuando no ponga en ellipsize="end" tvDesc, que muestra la línea 3, que está bien. Aquí es código: XML:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" > 

    <ImageView 
     android:id="@+id/imgv" 
     android:layout_width="65dp" 
     android:layout_height="80dp" 
     android:layout_alignParentLeft="true" 
     android:layout_alignParentTop="true" 
     android:src="@drawable/img1" 
     android:scaleType="fitXY" /> 

    <TextView 
     android:id="@+id/tvTitle" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentTop="true" 
     android:layout_toRightOf="@+id/imgv" 
     android:background="@android:color/white" 
     android:textColor="@android:color/black" 
     android:text="Title testing line number and ellipsize at end" 
     android:maxLines="1" 
     android:singleLine="true" 
     android:ellipsize="end" <--- WORKS WELL 
     android:textAppearance="?android:attr/textAppearanceMedium" /> 

    <TextView 
     android:id="@+id/tvDesc" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_below="@+id/tvTitle" 
     android:layout_toRightOf="@+id/imgv" 
     android:layout_alignBottom="@+id/imgv" 
     android:layout_alignParentRight="true" 
     android:textSize="14dp" 
     android:lines="3" 
     android:maxLines="3" 
         <---------- WITHOUT ellipsize 

     android:text="I wanna this textview of having 3 lines and ellipsize at END and at this time I am Testing for it. This TextView shows 3 lines WITHOUT ellipsize property, but shows only 2 Lines when ELLIPSIZE property is setted" 
     android:textAppearance="?android:attr/textAppearanceMedium" /> 

</RelativeLayout> 

Por encima de código muestra TextView tvDesc con 3 líneas y n-Ellipsize. imagen Aquí está:

enter image description here

Pero, quiero ellipsize, así que utiliza código followin: XML:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" > 

    <ImageView 
     android:id="@+id/imgv" 
     android:layout_width="65dp" 
     android:layout_height="80dp" 
     android:layout_alignParentLeft="true" 
     android:layout_alignParentTop="true" 
     android:src="@drawable/img1" 
     android:scaleType="fitXY" /> 

    <TextView 
     android:id="@+id/tvTitle" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentTop="true" 
     android:layout_toRightOf="@+id/imgv" 
     android:background="@android:color/white" 
     android:textColor="@android:color/black" 
     android:text="Title testing line number and ellipsize at end" 
     android:maxLines="1" 
     android:singleLine="true" 
     android:ellipsize="end" 
     android:textAppearance="?android:attr/textAppearanceMedium" /> 

    <TextView 
     android:id="@+id/tvDesc" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_below="@+id/tvTitle" 
     android:layout_toRightOf="@+id/imgv" 
     android:layout_alignBottom="@+id/imgv" 
     android:layout_alignParentRight="true" 
     android:textSize="14dp" 
     android:lines="3" 
     android:maxLines="3" 
     android:ellipsize="end" <------ WITH ELLIPSIZE 

     android:text="I wanna this textview of having 3 lines and ellipsize at END and at this time I am Testing for it. This TextView shows 3 lines WITHOUT ellipsize property, but shows only 2 Lines when ELLIPSIZE property is setted" 
     android:textAppearance="?android:attr/textAppearanceMedium" /> 

</RelativeLayout> 

Lo que demuestra TextView tvDesc con sólo 2 líneas y Ellipsize,

que no está correctamente desmezclado, como sigue: enter image description here

Quiero 3 líneas en TextView tvDesc con ellipsize

Puede alguien ayudarme.?

+1

Creo que se está ejecutando en un [problema conocido] (http: // stackoverflow. com/questions/2160619/android-ellipsize-multiline-textview) – tiguchi

+0

No sé exactamente por qué sucede esto. Pero si quiere ir con elipsis, entonces conserva su propiedad en lugar de final. –

Respuesta

44

Esta es, de lejos, la solución más simple que he encontrado y actualmente estoy utilizando en la implementación. ¡Avíseme si necesita alguna otra ayuda!

Ah, y recuerde eliminar la etiqueta android:ellipsize en su XML, ya que utilizará el código inferior para elipsar automáticamente al final de 3 líneas.

TextView snippet; 
snippet.setText("loren ipsum dolor loren ipsum dolor loren ipsum dolor loren ipsum dolor loren ipsum dolor loren ipsum dolor loren ipsum dolor loren ipsum dolor loren ipsum dolor loren ipsum dolor loren ipsum dolor loren ipsum dolor loren ipsum dolor loren ipsum dolor ") 
ViewTreeObserver vto = this.snippet.getViewTreeObserver(); 
vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() { 

    @Override 
    public void onGlobalLayout() { 
     ViewTreeObserver obs = snippet.getViewTreeObserver(); 
     obs.removeGlobalOnLayoutListener(this); 
     if (snippet.getLineCount() > 3) { 
      int lineEndIndex = snippet.getLayout().getLineEnd(2); 
      String text = snippet.getText().subSequence(0, lineEndIndex - 3) + "..."; 
      snippet.setText(text); 
     } 
    } 
}); 
+0

Gracias, yaar ... Funcionó. Muchas gracias. –

+0

Esta es una buena solución, pero hay una manera más fácil y más limpia, ver mi respuesta. – Flawyte

+1

Gracias, esto funcionó para mí, pero sería mucho más fácil si maxLines y ellipsize trabajaran juntos. – draksia

-2

Pruébalo

tv.setSingleLine(false); 
tv.setEllipsize(TextUtils.TruncateAt.END); 
int n = 3; // the exact number of lines you want to display 
tv.setLines(n); 

refiere Programmatically create TextView with ellipsis

+0

Has verificado esto, no funciona para mí. – vrs

+0

Ver la respuesta de Vishwa Patel, está funcionando perfectamente. –

+0

Ver la edición. Me perdí para agregar las dos líneas. tv.setSingleLine (falso); y tv.setLines (n); –

-1

sólo tiene que utilizar ellipsize combinarse con scrollHorizontally="true". Simple & limpio.

Funcionó perfectamente para mí.

+1

Esto simplemente lo convierte en una sola línea que ya puede hacer con la propiedad 'singleLine' –

+0

@AliGangji No creo que ese fuera el caso cuando publiqué. Es bueno saber – Flawyte

+0

Para mí, esta solución funciona (Android 5.0) incluso para multilínea TextView. Pero la cantidad de líneas cambia entre TextViews (de 1 a maxLines). – CoolMind

16

Simplemente configure android:maxLines y android:ellipsize.

<TextView 
     android:id="@+id/tv_dua" 
     android:ellipsize="end" 
     android:maxLines="3" 
     android:text="long text" 
     android:textAppearance="?android:attr/textAppearanceMedium" /> 
+0

Excepto que no funciona en las versiones de Honeycomb. Lo que obtengo es una vista de texto con el tamaño de 2 líneas, pero se obtiene la parte superior de las letras en la tercera línea y no hay puntos suspensivos. –

+0

En algún lugar alrededor de KitKat o Lollipop esto comenzó a funcionar correctamente (se me olvida el nivel exacto de API). Antes de eso, todavía limita a la correcta 'maxLines', pero no incluye los puntos suspensivos también. Aún así, creo que es bastante razonable en estos días vivir con esto, ya que es una alternativa mucho más simple que la manipulación manual de cadenas en el código. –

2

la siguiente manera para obtener una TextView de varias líneas con puntos suspensivos en la última línea:

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

Reemplazar 4 con el número de líneas que desea. Espero que ayude!

0

lo probé con maxLines y ellipsize en Android 7 & 8.

android:maxLines="3" 
android:ellipsize="end" 

La vista previa muestra 2 líneas y en la tercera línea "...".

Pero esto parece ser un error en la previsualización.

En el dispositivo sólo funciona bien, con 3 líneas de texto, al final de la tercera línea "..."

Cuestiones relacionadas