2010-05-26 14 views
45

quiero limitar mi punto de vista de texto para tener el máximo de 5 líneas, así que lo hice:Cómo establecer maxLines y ellipsize de un TextView, al mismo tiempo

<TextView 
    android:id="@+id/text" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:maxLines="5" /> 

Pero cuando intento configurarlo para añadir '...' cuando el texto se trunca, agrego android: ellipsize = "end". Veo el ... pero mi TextView solo tiene una línea máxima de 2, en lugar de 5.

¿Puede sugerir cómo puedo hacer la vista de texto de la línea máxima de 5 y agregar '...' cuando se trunca?

Gracias.

+5

¿Has descubierto esto? Tal vez podría publicar su respuesta a continuación para la referencia de otros usuarios – HXCaine

+1

Intente eliminar esta línea: android: ellipsize = "..." – merrymenvn

+0

Para mí, realmente funciona cuando se elimina 'ellipsize'. En lugar de '...' utilizo 'setVerticalFadingEdgeEnabled' y' setFadingEdgeLength'. – Stan

Respuesta

26

intenta este código ...

final TextView tv_yourtext = (TextView)findViewById(R.id.text); 

    tv_yourtext.setText("A really long text"); 
    ViewTreeObserver vto = tv_yourtext.getViewTreeObserver(); 
    vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() { 

     @Override 
     public void onGlobalLayout() { 
      ViewTreeObserver obs = tv_yourtext.getViewTreeObserver(); 
      obs.removeGlobalOnLayoutListener(this); 
      if(tv_yourtext.getLineCount() > 6){ 
       Log.d("","Line["+tv_yourtext.getLineCount()+"]"+tv_yourtext.getText()); 
       int lineEndIndex = tv_yourtext.getLayout().getLineEnd(5); 
       String text = tv_yourtext.getText().subSequence(0, lineEndIndex-3)+"..."; 
       tv_yourtext.setText(text); 
       Log.d("","NewText:"+text); 
      } 

     } 
    }); 
+1

¡Este código funciona perfectamente para mí! @michael, si le sirve, debe marcarlo como la respuesta. – neevek

+0

Tengo una pregunta. cuál es la función del siguiente código ViewTreeObserver obs = tv_yourtext.getViewTreeObserver(); obs.removeGlobalOnLayoutListener (this); C an Yo uso vto.removeGlobalOnLayoutListener (esto) en su lugar? Gracias. – RxRead

8

Sólo tiene que añadir esta línea a su TextView:

android:ellipsize="marquee" 
+1

respuesta corta y clara, gracias !!! –

+1

Sí, está funcionando gracias ... –

+0

¡De nada! –

47

Progrmatically, puede utilizar:

your_text_view.setEllipsize(TextUtils.TruncateAt.END); 
your_text_view.setMaxLines(4); 
your_text_view.setText("text"); 
+1

Esto no funciona para mí siempre lo establece para 1 línea – JPM

+0

Verifique su archivo xml. Podría ser su TextView puede tener Android: maxLines = "1". Si es eliminarlo. – Imeshke

+2

Para mí no está funcionando es un error definitivo en Android. Si utilizo el método treeObserver. – JPM

0

Cuando me puse la altura de Vista de Texto a un valor constante (como 50DP), que funciona bien para mí.

Cuestiones relacionadas