Android: TextView automatycznie obcina i zamienia ostatnie 3 znaki ciągu

136

Jeśli a Stringjest dłuższe niż TextViewszerokość, automatycznie zawija się do następnej linii. Mogę tego uniknąć, używając android:singleLine(przestarzałe) lub ustawiając android:inputType="text". Teraz potrzebuję czegoś, co zastąpi ostatnie 3 moje znaki znakiem String ”. Ponieważ nie używam czcionki o stałej szerokości, zawsze będzie się to różnić w zależności od liter użytych w my String. Zastanawiam się więc, jaki jest najlepszy sposób, aby uzyskać ostatnie 3 znaki ciągu w a TextViewi je zastąpić. Może jest już coś zaimplementowanego we frameworku Androida, ponieważ to musi być powszechny problem.

znq
źródło

Odpowiedzi:

298

Powinieneś móc użyć właściwości „elipsize” widoku tekstu:

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

Konieczne może być również zastosowanie wartości grawitacji do układu; Czasami widziałem widoki „automatycznie rozciągające się” bez nich.

Nate
źródło
Idealny. Dzięki. Próbowałem tego wcześniej, ale nie zadziałało, ponieważ użyłem androida: inputType = "text" zamiast android: singleLine = "true" (który powinien być przestarzały). Ale teraz będę trzymał się androida: singleLine = "true". Bardzo dziękuję.
znq
44
Nadal nie dodaje „…”. Dla mnie na to pytanie nie ma pełnej odpowiedzi! Ta odpowiedź sprawi, że „krótkie bardzo długie słowo” stanie się po prostu „krótkim”, a nie „krótkim bardzolon…”. Ponadto sugerujecie użycie wycofanego atrybutu.
OneWorld
7
Działa świetnie, jednak singleLine jest przestarzałe, więc musisz zamiast tego użyć maxLines = "1". Uwaga dodatkowa, elipsa działa również z wieloma liniami!
Torre Lasley
4
singleLine jest przestarzała. Użyj maxLines = "1". tylko komentarz do starej odpowiedzi
Ewoks
1
MaxLine = 1 obetnie tekst w środku. SingleLine = True działa zgodnie z oczekiwaniami.
Snake
33

Znalazłem interesujące rozwiązanie tego problemu.

maxLines=1
ellipsize=end
scrollHorizontally=true

Rzecz w tym, że ostatnie stwierdzenie dotyczące przewijania w poziomie… sprawdź to. Działa przynajmniej w wersji 2.2.

BonanzaDriver
źródło
Ciekawe ... dobrze wiedzieć. Dzięki Marco za ostrzeżenie.
BonanzaDriver
4

Programowo możesz użyć:

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
źródło