2010-05-26 4 views
45

Je veux limiter mon point de vue de texte pour avoir un maximum de 5 lignes, donc je l'ai fait:Comment configurer maxLines et ellipsize d'un TextView en même temps

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

Mais lorsque je tente de le configurer pour ajouter '...' lorsque le texte est tronqué, j'ajoute android: ellipsize = "end". Je vois le ... mais alors mon TextView a seulement une ligne maximum de 2, au lieu de 5.

Pouvez-vous suggérer comment je peux faire la vue de texte de la ligne maximum de 5 et ajouter '...' quand il est tronqué?

Merci.

+5

Avez-vous compris? Vous pourriez peut-être poster votre réponse ci-dessous pour la référence d'autres utilisateurs – HXCaine

+1

Essayez de supprimer cette ligne: android: ellipsize = "..." – merrymenvn

+0

Pour moi, ça marche vraiment quand 'ellipsize' est enlevé. Au lieu de '...' j'utilise 'setVerticalFadingEdgeEnabled' et' setFadingEdgeLength'. – Stan

Répondre

26

essayez ce code ...

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

Ce code fonctionne parfaitement pour moi! @ Michael, si cela fonctionne pour vous, vous devriez le marquer comme la réponse. – neevek

+0

J'ai une question. quelle est la fonction du code suivant. ViewTreeObserver obs = tv_yourtext.getViewTreeObserver(); obs.removeGlobalOnLayoutListener (this); Puis-je utiliser vto.removeGlobalOnLayoutListener (this) à la place? Merci. – RxRead

8

Il vous suffit d'ajouter cette ligne à votre TextView:

android:ellipsize="marquee" 
+1

réponse courte et claire, merci !!! –

+1

Oui, ça fonctionne, merci .. –

+0

De rien! –

47

Progrmatically, vous pouvez utiliser:

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

Cela ne fonctionne pas pour moi, il le définit toujours pour 1 ligne – JPM

+0

Vérifiez votre fichier XML. Peut-être que votre TextView peut avoir android: maxLines = "1". Si c'est l'enlever. – Imeshke

+2

Pour moi ce n'est pas là que ça marche est un bug définitif sur Android. Si j'utilise la méthode treeObserver. – JPM

0

Quand je mets la hauteur TextView à une valeur constante (comme 50dp), il fonctionne très bien pour moi.

Questions connexes