Android: TextView schneidet die letzten 3 Zeichen des Strings automatisch ab und ersetzt sie


130

Wenn a Stringlänger als die TextViewBreite ist, wird es automatisch in die nächste Zeile umgebrochen. Ich kann dies vermeiden, indem ich android:singleLine(veraltet) oder einstelle android:inputType="text". Was ich jetzt brauche, ist etwas, das die letzten 3 Zeichen von mir Stringdurch " ... " ersetzt. Da ich keine Monospace-Schriftart verwende, ist diese abhängig von den in meiner Schrift verwendeten Buchstaben immer unterschiedlich String. Ich frage mich also, wie ich die letzten 3 Zeichen eines Strings am besten in a einfügen TextViewund ersetzen kann. Vielleicht ist im Android-Framework bereits etwas implementiert, da dies ein häufiges Problem sein muss.

Antworten:


289

Sie sollten in der Lage sein, die Eigenschaft "ellipsize" einer Textansicht zu verwenden:

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/text_mytext"
    android:ellipsize="end"
    android:maxLines="1"
/>

Möglicherweise müssen Sie auch Schwerkraftwerte auf das Layout anwenden. Ich habe manchmal "Auto-Stretching" -Ansichten ohne sie gesehen.


Perfekt. Vielen Dank. Ich habe das schon einmal versucht, aber es hat nicht funktioniert, weil ich android: inputType = "text" anstelle von android: singleLine = "true" verwendet habe (was veraltet sein soll). Aber jetzt bleibe ich bei Android: singleLine = "true". Vielen Dank.
ZnQ

44
Das "..." wird immer noch nicht hinzugefügt. Für mich ist diese Frage nicht vollständig beantwortet! Diese Antwort macht "kurzes sehr langes Wort" zu "kurz" und nicht zu "kurzes sehr langes Wort ...". Außerdem schlagen Sie vor, ein veraltetes Attribut zu verwenden.
OneWorld

7
Funktioniert hervorragend, jedoch ist singleLine veraltet, sodass Sie stattdessen maxLines = "1" verwenden müssen. Nebenbei bemerkt, Ellipsize funktioniert auch mit mehreren Zeilen!
Torre Lasley

4
singleLine ist veraltet. Verwenden Sie maxLines = "1". Nur ein Kommentar zur alten Antwort
Ewoks

1
MaxLine = 1 schneidet die Textansicht in der Mitte ab. SingleLine = True funktioniert wie erwartet.
Schlange

33

Ich habe eine interessante Lösung für dieses Problem gefunden.

maxLines=1
ellipsize=end
scrollHorizontally=true

Der Trick ist die letzte Aussage zum horizontalen Scrollen. Es funktioniert zumindest unter v2.2.


Interessant ... gut zu wissen. Danke Marco für das Heads-up.
BonanzaDriver

4

Programmatisch können Sie Folgendes verwenden:

TextView tx = new TextView(this);
tx.setTextSize(13);
tx.setGravity(Gravity.CENTER);
tx.setTop(90);
tx.setText("Long text here");
tx.setTextColor(Color.BLACK);
tx.setSingleLine(true);
tx.setEllipsize(TruncateAt.END);
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.