Wie kann ich Ellipsen in meiner Textansicht anzeigen, wenn sie größer als die 1-Zeile sind?


100

Ich habe das folgende Layout, das nicht funktioniert:

<LinearLayout 
    android:orientation="horizontal" 
    android:layout_width="match_parent" 
    android:id="@+id/experienceLayout" 
    android:background="#ffffff" 
    android:layout_height="match_parent" 
    android:paddingLeft="6dp" 
    android:paddingRight="6dp" 
    android:paddingBottom="6dp" 
    android:paddingTop="6dp">

    <TextView 
        android:layout_weight="1" 
        android:id="@+id/experienceLabel" 
        android:text="Experience" 
        android:layout_height="wrap_content" 
        android:textColor="#000000" 
        android:layout_width="wrap_content" 
        android:textStyle="bold">
    </TextView>

    <TextView 
        android:id="@+id/experienceTextView" 
        android:text="TextView" 
        android:layout_height="wrap_content" 
        android:textColor="#000000" 
        android:layout_width="wrap_content" 
        android:ellipsize="end" 
        android:lines="1" 
        android:maxLines="1" 
        android:singleLine="true" 
        android:fadeScrollbars="false">
    </TextView>

</LinearLayout>

Antworten:


285

Dies ist ein häufiges Problem. Versuchen Sie Folgendes:

android:scrollHorizontally="true"
android:ellipsize="end" 
android:maxLines="1"

.............. die scrollHorizontally ist die "spezielle Sauce", mit der es funktioniert.


12
Seltsam ... Ich habe es versucht, android:scrollHorizontally="true"aber es hat nicht funktioniert, ich musste das veraltete Attribut verwenden android:singleLine="true".
Gerardo Contijoch

1
Ja scrollHorizontallyist der eigentliche Schlüssel zu...
Rishabh Dutt Sharma

scrollHorizontal? Natürlich möchte ich keinen horizontalen Scroll-Effekt.
filthy_wizard

@ user1232726: Ja, "horizontal scrollen". Schauen Sie sich aus Gründen des gesunden Menschenverstandes das Datum der Frage und das Datum der Antworten an. Es versteht sich von selbst, dass beide derzeit möglicherweise nicht relevant sind (vor dem Kommentieren).
BonanzaDriver

Die Verwendung von Ellipsize mit maxLines kann zum Absturz der App führen - Bericht von Android Studio Intellisense
Vaishnav Mhetre


25

Benutze das

android:ellipsize="end"  
android:singleLine="true"

Verwenden Sie dies nicht, ohne genau zu wissen, welche Ausgabe kommt

android:ellipsize="end"  
android:maxLines="1"

Wenn Sie es verwenden maxlines = 1, werden einige Zeit die meisten Zeichen abgeschnitten.


12

Die Art und Weise, wie es auf mehreren Geräten / APIs für mich funktionierte, war programmgesteuert wie folgt (wobei tv Ihre Textansicht ist):

    if (tv.getLineCount() > 1) {
        int lineEndIndex = tv.getLayout().getLineEnd(0);
        String text = tv.getText().subSequence(0, lineEndIndex - 3) + "\u2026";
        tv.setText(text);
    }

2
Dies ist die hilfreichste Antwort von allen ... funktioniert auf jeder einzelnen API und kann einfach als Utils-Bibliothek konvertiert werden.
Mariano Zorrilla

1
Sie sollten das Auslassungszeichen \u2026anstelle der drei .Zeichen verwenden
Chris Stillwell

Sie haben Recht @ChrisStillwell und ich verwende das Auslassungszeichen in meinem Code. Ich habe die Antwort bearbeitet, danke. :)
Marilia

3

Alle obigen Antworten erfüllen also die Anforderung, dass nur 1 Zeile und dann die Auslassungspunkte angezeigt werden sollen. Wenn Sie jedoch möchten, dass die Auslassungspunkte nach bestimmten Textzeilen angezeigt werden, sollten Sie Folgendes verwenden:

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

Damit erscheint die Ellipse erst nach 2 Zeilen. Hinweis: Es ist wichtig, singleLine als false zu haben.


Der Standardwert ist laut Dokumentation falsch: developer.android.com/reference/android/widget/…
Pierre


-1

android:singleLineist veraltet. In meinem Fall musste ich eine feste Höhe für das bekommen TextViewund ich verwendete das android:linesAttribut anstelle von android:maxLines. Ich dachte, das könnte jemandem helfen, der das gleiche Problem wie ich hat.

android:ellipsize="end"
android:lines="2"

Nicht wahr. Die Dokumentation sagt nichts über die
Ablehnung aus

@cesards Interessant. Dieses Dokument besagt, dass es sich um - developer.android.com/reference/android/R.attr.html#singleLine
Reaz Murshed handelt,
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.