Muszę zmienić wielokropek na widok tekstu z wieloma wierszami. Mój komponent jest wystarczająco duży, aby wyświetlić co najmniej 4 linie z elipsą, ale wyświetlane są tylko 2 linie. Próbowałem zmienić minimalną i maksymalną liczbę wierszy komponentu, ale nic to nie zmienia.
163
Odpowiedzi:
Oto rozwiązanie problemu. Jest to podklasa TextView, która faktycznie działa w przypadku elipsy. W kodzie android-textview-multiline-ellipse wymienionym we wcześniejszej odpowiedzi stwierdziłem, że w pewnych okolicznościach zawiera błędy, a także podlega licencji GPL, która tak naprawdę nie działa dla większości z nas. Zapraszam do swobodnego używania tego kodu bez uznania autorstwa lub w ramach licencji Apache, jeśli wolisz. Zwróć uwagę, że istnieje słuchacz, który powiadamia Cię, gdy tekst stanie się wielokropkiem, co sam uznałem za całkiem przydatne.
źródło
W mojej aplikacji miałem podobny problem: 2 linie łańcucha i ostatecznie dodałem „...”, jeśli ciąg był za długi. Użyłem tego kodu w pliku xml do tagu textview:
źródło
setText(..., TextView.BufferType.SPANNABLE);
.Też napotkałem ten problem. Jest w tym dość stary błąd, który pozostaje bez odpowiedzi: błąd 2254
źródło
Spróbuj tego, to działa dla mnie, mam 4 linie i dodaje "..." na końcu ostatniej / czwartej linii. To to samo, co odpowiedź morale, ale mam tam singeLine = "false".
źródło
Mam ten problem i na koniec buduję sobie krótkie rozwiązanie. Musisz tylko ręcznie elipsować żądaną linię, twój atrybut maxLine wycina twój tekst.
W tym przykładzie wycięto tekst na maksymalnie 3 linie
źródło
Połączyłem rozwiązania Micaha Hainline'a, Alexa Băluța i Paula Imhoffa, aby stworzyć wielokropek,
TextView
który obsługuje równieżSpanned
tekst.Wystarczy ustawić
android:ellipsize
iandroid:maxLines
.Pełne źródło: EllipsizingTextView.java
źródło
W moim przypadku nie ma potrzeby kodowania tego w Javie. Wszystko działa zgodnie z oczekiwaniami. Nie potrzeba czegoś takiego
android:singleLine="false"
.Ale wygląda na to, że w podglądzie układu Android Studio (v3.0) jest błąd:
Biorąc pod uwagę Androida 7.1.1 na moim urządzeniu, to działa:
źródło
Opierając się na rozwiązaniach Micaha Hainline'a i komentarza alebsa, wyszedłem z następującym podejściem, które działa z tekstami Spanned, więc np.
myTextView.setText(Html.fromHtml("<b>Testheader</b> - Testcontent"));
Działa! Zauważ, że działa to tylkoSpanned
teraz. Może być zmodyfikowany do pracy zString
iSpanned
tak czy inaczej.źródło
Dla zainteresowanych, oto port C # Xamarin.Android z pięknym rozwiązaniem Micaha:
źródło
Aby dodać
...
koniec drugiej linii, zapisując 1 linię, jeśli tekst jest krótki:źródło
Po prostu dodaj kod w swojej aktywności
spowoduje to dodanie wielokropka na końcu widoku tekstu
źródło
Rozszerz TextView i zastąp te metody:
źródło
To jest moje rozwiązanie. możesz pobrać demo na mój github. https://github.com/krossford/KrossLib/tree/master/android-project
Ten zrzut ekranu był pokazem
maxLines = 4
, który myślę, że działa dobrze.źródło
Miałem ten sam problem. Naprawiłem to, usuwając po prostu androida: ellipsize = "marquee"
źródło
Kod działał bardzo dobrze! Możesz przeciążyć metodę onSizeChanged, jeśli nie tylko Text ma zostać zmieniony.
źródło
Ten również obsłużył mój kod HTML,
Oryginalne źródło LINK
źródło
Najlepsza odpowiedź od Micah Hainline działa świetnie, ale jeszcze lepsza jest biblioteka, która została zbudowana na jej podstawie przez użytkownika aleb, który zamieścił w komentarzach pod odpowiedzią Micaha:
Jest w nim kilka innych funkcji, jeśli potrzebujesz tylko TextView, jest tutaj .
Może to pomoże innym znaleźć to szybciej niż ja :-)
źródło
To późno, ale znalazłem klasę na licencji Apache z Androida, która jest używana w aplikacji pocztowej: https://android.googlesource.com/platform/packages/apps/UnifiedEmail/+/184ec73/src/com/android/ mail / ui / EllipsizedMultilineTextView.java
źródło
Jest kilka atrybutów, które powinieneś sprawdzić: android: lines, android: minLines, android: maxLines. Aby wyświetlić maksymalnie 4 linie i nadać im elipsę, potrzebujesz tylko android: maxLines i android: ellipsize:
źródło
Musisz to uwzględnić w swoim widoku tekstu:
domyślnie jest to prawda. Musisz jawnie ustawić to jako fałsz.
źródło
code <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:maxLines="4" android:ellipsize="marquee" android:singleLine="false" android:text="Hai make this a very long string that wraps at least 4 lines!" />