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.

znq
quelle

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.

Nate
quelle
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.

BonanzaDriver
quelle
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);
xevser
quelle