2010-05-26 11 views
45

voglio limitare la mia visione del testo per avere il massimo di 5 linee, così ho fatto:Come impostare maxLines e ellipsize di un TextView allo stesso tempo

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

Ma quando provo a configurarlo per aggiungere '...' quando il testo viene troncato, aggiungo android: ellipsize = "end". Vedo il ... ma il mio TextView ha solo una linea massima di 2, invece di 5.

Puoi suggerire come posso visualizzare il testo della linea massima di 5 e aggiungere '...' quando viene troncato?

Grazie.

+5

Hai capito? Forse potresti postare la tua risposta sotto per il riferimento di altri utenti – HXCaine

+1

Prova a rimuovere questa riga: android: ellipsize = "..." – merrymenvn

+0

Per me, funziona davvero quando 'ellipsize' viene rimosso. Invece di "..." uso 'setVerticalFadingEdgeEnabled' e' setFadingEdgeLength'. – Stan

risposta

26

provare questo codice ...

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

Questo codice funziona perfettamente per me! @ Michael, se funziona per te, dovresti contrassegnarlo come risposta. – neevek

+0

Ho una domanda. qual è la funzione del seguente codice. ViewTreeObserver obs = tv_yourtext.getViewTreeObserver(); obs.removeGlobalOnLayoutListener (questo); C an uso invece vto.removeGlobalOnLayoutListener (this)? Grazie. – RxRead

8

Hai solo bisogno di aggiungere questa riga al vostro TextView:

android:ellipsize="marquee" 
+1

risposta breve e chiara, grazie !!! –

+1

Sì, sta funzionando grazie .. –

+0

Prego! –

47

Progrmatically, è possibile utilizzare:

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

Questo non funziona per me lo imposta sempre per 1 riga – JPM

+0

Controlla il tuo file xml. Potrebbe essere il tuo TextView può avere Android: maxLines = "1". Se è rimuoverlo. – Imeshke

+2

Per me il suo non funziona è un bug preciso in Android. Se utilizzo il metodo treeObserver. – JPM

0

Quando ho creato l'altezza TextView ad un valore costante (come 50dp), funziona bene per me.

Problemi correlati