2012-06-26 6 views
40

wenn ich verwende TextView mit singleLine="true" und ellipsize="end" (meine Top-Textview) gezeigt Linien, es gut TextViewEinstellung Ellipsize auf Textview reduziert durch eine (statt nur ellipsizing letzten)

aber in einer anderen arbeitet mit mehr als 1 Zeilen (in meinem Fall 3 Zeilen in meinem unteren TextView), lines="3" and maxLines="3" and ellipsize="end",funktioniert nicht richtig.

Wenn ich nicht ellipsize="end" in tvDesc setzen, zeigt es 3 Zeile, die in Ordnung ist. Hier ist Code: 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> 

Above Code zeigt Textview tvDesc mit 3 Zeilen und No-Ellipsize. Hier Image:

enter image description here

Aber ich will ellipsize, so nutzt ich followin Code: 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> 

Welche Textview tvDesc mit nur zwei Linien und Ellipsize zeigt,

die UI ist nicht richtig entziffert, wie folgt: enter image description here

Ich möchte 3 Zeilen in Textview tvDesc mit ellipsize

kann jemand mir helfen.?

+1

Ich glaube, Sie werden in ein [bekannten Problem] ausgeführt wird (http: // Stackoverflow. com/questions/2160619/android-ellipsize-multiline-textview) – tiguchi

+0

Ich weiß nicht genau, warum das passiert. Aber wenn Sie mit Ellipse gehen wollen, dann behalten Sie seine keine Eigenschaft anstelle von Ende. –

Antwort

44

Dies ist bei weitem die einfachste Lösung, die ich gefunden habe und derzeit im Einsatz verwende. Lassen Sie mich wissen, wenn Sie andere Hilfe benötigen!

Oh, und denken Sie daran, das Tag android:ellipsize in Ihrem XML-Code zu entfernen, da Sie den unteren Code verwenden, um am Ende der drei Zeilen automatisch die Ellipsenbreite zu erhalten.

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

Danke yaar ... Es hat funktioniert. Danke vielmals. –

+0

Dies ist eine gute Lösung, aber es gibt einen einfacheren und saubereren Weg, siehe meine Antwort. – Flawyte

+1

Danke, das funktionierte für mich, aber es wäre viel einfacher, wenn MaxLines und Ellipsize zusammen arbeiteten. – draksia

-2

Probieren Sie es

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

Programmatically create TextView with ellipsis beziehen sich nur

+0

Haben Sie das überprüft, es funktioniert nicht für mich. – vrs

+0

Siehe die Antwort von Vishwa Patel, es funktioniert perfekt. –

+0

Siehe die Änderung. Ich habe es versäumt, die zwei Zeilen hinzuzufügen. tv.setSingleLine (false); und tv.setLines (n); –

-1

mit scrollHorizontally="true"ellipsize kombiniert verwenden. Einfach & sauber.

Es funktionierte perfekt für mich.

+1

Das macht es nur eine Zeile, die Sie schon mit der 'singleLine' Eigenschaft tun können –

+0

@AliGangji Ich glaube nicht, dass das der Fall war, als ich gepostet habe. Gut zu wissen – Flawyte

+0

Für mich funktioniert diese Lösung (Android 5.0) sogar für mehrzeiliges TextView. Aber die Anzahl der Zeilen ändert sich bei TextViews (von 1 bis maxLines). – CoolMind

16

Nur android:maxLines und android:ellipsize einstellen.

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

Außer es funktioniert nicht auf Versionen von Honeycomb. Was ich bekomme, ist die Textansicht in 2 Zeilen, aber Sie erhalten die Oberseiten der Buchstaben in der dritten Zeile und keine Ellipse. –

+0

Irgendwo in der Nähe von KitKat oder Lollipop hat das richtig funktioniert (ich vergesse die genaue API-Ebene). Zuvor beschränkt es sich noch auf die richtigen 'maxLines', schließt aber auch nicht die Ellipse ein. Dennoch denke ich, dass es in diesen Tagen einigermaßen vernünftig ist, damit zu leben, da es eine viel einfachere Alternative zur manuellen String-Manipulation im Code ist. –

2

Verwenden Sie die folgenden ein mehrzeiliges Textview mit drei Punkten in der letzten Zeile zu erhalten:

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

ersetzen 4 mit der Anzahl der Zeilen, die Sie wollen. Hoffe es hilft!

0

ich versuchte es mit maxLines und ellipsize auf Android 7 & 8.

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

Die Vorschau zeigt 2 Zeilen und in der dritten Zeile "...".

Aber das scheint ein Bug in der Vorschau zu sein.

auf dem Gerät nur funktioniert es gut, 3-Zeilen mit Text, am Ende der dritten Zeile „...“

Verwandte Themen