2010-05-26 11 views
45

Ich möchte meine Textansicht begrenzen maximal 5 Zeilen haben, so dass ich tat:Wie maxLines und ellipsize eines Textview zugleich setzen

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

Aber wenn ich versuche, es zu konfigurieren hinzufügen '...' Wenn der Text abgeschnitten ist, füge ich android: ellipsize = "end" hinzu. Ich sehe die ... aber dann hat mein TextView nur eine maximale Zeile von 2, anstelle von 5.

Können Sie bitte vorschlagen, wie kann ich die Textansicht der maximalen Zeile von 5 und fügen Sie "..." wenn es abgeschnitten wird?

Vielen Dank.

+5

Haben Sie das herausgefunden? Vielleicht könnten Sie Ihre Antwort unten für die Referenz anderer Benutzer posten – HXCaine

+1

Versuchen Sie, diese Zeile zu entfernen: android: ellipsize = "..." – merrymenvn

+0

Für mich funktioniert es wirklich, wenn "Ellipsize" entfernt wird. Statt '...' verwende ich 'setVerticalFadingEdgeEnabled' und' setFadingEdgeLength'. – Stan

Antwort

26

diesen Code versuchen ...

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

Dieser Code funktioniert perfekt für mich! @michael, wenn es für dich funktioniert, solltest du es als Antwort markieren. – neevek

+0

Ich bekomme eine Frage. Was ist die Funktion des folgenden Codes? ViewTreeObserver obs = tv_yourtext.getViewTreeObserver(); obs.removeGlobalOnLayoutListener (this); C an Ich verwende stattdessen vto.removeGlobalOnLayoutListener (this)? Vielen Dank. – RxRead

8

Sie brauchen nur diese Zeile in die Textview hinzuzufügen:

android:ellipsize="marquee" 
+1

kurze und klare antwort, danke !!! –

+1

Ja, es funktioniert Danke .. –

+0

Gern geschehen! –

47

Progrmatically, können Sie verwenden:

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

Dies funktioniert nicht für mich es setzt es immer für 1 Zeile – JPM

+0

Überprüfen Sie Ihre XML-Datei. Möglicherweise ist Ihr TextView kann Android: maxLines = "1". Wenn es ist, entfernen Sie es. – Imeshke

+2

Für mich ist es nicht funktionieren, ist ein bestimmter Fehler in Android. Wenn ich die Methode TreeObserver verwende. – JPM

0

Wenn ich die Textview Höhe auf einen konstanten Wert (wie 50dp) gesetzt ist, funktioniert es für mich in Ordnung.

Verwandte Themen