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>
Sheehan Alam
quelle

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.

BonanzaDriver
quelle
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
33

Dadurch wird auch eine einzelne Linie mit Auslassungspunkten erstellt

 android:singleLine="true"
Atul Bhardwaj
quelle
15
Dies ist anscheinend veraltet
Oliver Pearmain
1
Dieser bricht besser lange Worte.
Bpiec
android: maxLines = "1"
Jaydev
1
@grebulon Es ist veraltet. Zumindest jetzt.
Spikatrix
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.

Mohamed Ibrahim
quelle
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);
    }
Marilia
quelle
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.

SDK4551
quelle
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"
Reaz Murshed
quelle
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,