Mam prosty HTML :
<h2>Title</h2><br>
<p>description here</p>
Chcę wyświetlić tekst w stylu HTML TextView
. Jak to zrobić?
android
html
xml-parsing
textview
UMAR
źródło
źródło
Odpowiedzi:
Musisz użyć,
Html.fromHtml()
aby użyć HTML w ciągach XML. Po prostu odwołanie się do ciągu za pomocą HTML w układzie XML nie będzie działać.Oto co powinieneś zrobić:
źródło
h2
z definicji tworzy wokół siebie duży margines. ap
także ma pewien margines. jeśli nie chcesz odstępu, możesz rozważyć użycie innych elementów HTML.android.text.Html.fromHtml
. Wiem, że większość IDE naprawi to dla ciebie, ale dla czytelności lepiej poznać nazwy pakietów.setText (Html.fromHtml (bodyData)) jest przestarzały po API 24. Teraz musisz to zrobić:
źródło
Spójrz na to: https://stackoverflow.com/a/8558249/450148
To też jest całkiem dobre !!
Działa tylko z kilkoma tagami.
źródło
Jeśli chcesz mieć możliwość skonfigurowania go za pomocą xml bez żadnych modyfikacji w kodzie Java, ten pomysł może okazać się pomocny. Wystarczy wywołać init z konstruktora i ustawić tekst jako HTML
xml:
źródło
Jeśli próbujesz wyświetlić HTML z identyfikatora zasobu ciąg, formatowanie może nie zostać wyświetlone na ekranie. Jeśli tak się dzieje, spróbuj zamiast tego użyć tagów CDATA:
...
Zobacz ten post, aby uzyskać więcej informacji.
źródło
Poniższy kod dał mi najlepszy wynik.
źródło
źródło
Jeśli chcesz tylko wyświetlić tekst HTML i naprawdę nie potrzebujesz go
TextView
, to weźWebView
i użyj go w następujący sposób:Nie ogranicza to również kilku tagów HTML.
źródło
layout_height="wrap_content"
. Zamiast tego będziesz musiał ustawić jawną wysokość lub match_parent.Najlepsze podejście do korzystania z sekcji CData dla łańcucha w pliku strings.xml w celu uzyskania rzeczywistego wyświetlania zawartości HTML w TextView poniższy fragment kodu da ci dobry pomysł.
Sekcja CData w tekście ciągłym zachowuje nietknięte dane znacznika html nawet po sformatowaniu tekstu za pomocą metody String.format. Html.fromHtml (str) działa dobrze i zobaczysz pogrubiony tekst w wiadomości powitalnej.
Wynik:
źródło
Warto wspomnieć, że metoda Html.fromHtml (ciąg znaków) jest przestarzała od poziomu API 24. Jeśli to jest twój docelowy interfejs API, powinieneś użyć Html.fromHtml (źródła ciągów, flagi int) .
źródło
Chciałbym również zasugerować następujący projekt: https://github.com/NightWhistler/HtmlSpanner
Użycie jest prawie takie samo jak domyślny konwerter Androida:
Znalazłem go po tym, jak już rozpocząłem od własnej implementacji html do spanowalnego konwertera, ponieważ standardowy Html.fromHtml nie zapewnia wystarczającej elastyczności w zakresie kontroli renderowania, a nawet nie ma możliwości używania niestandardowych czcionek z ttf
źródło
Wiem, że to pytanie jest stare. Inne odpowiedzi tutaj sugerują
Html.fromHtml()
metodę. Proponuję użyćHtmlCompat.fromHtml()
zandroidx.core.text.HtmlCompat
pakietu. Ponieważ jest to wersjaHtml
klasy kompatybilna wstecz .Przykładowy kod:
W ten sposób można uniknąć sprawdzania wersji interfejsu API Androida i jest on łatwy w użyciu (rozwiązanie jednoliniowe).
źródło
Proste zastosowanie
Html.fromHtml("html string")
. To zadziała. Jeśli ciąg ma tagi,<h1>
to będą spacje. Ale nie możemy wyeliminować tych przestrzeni. Jeśli nadal chcesz usunąć spacje, możesz usunąć tagi w ciągu, a następnie przekazać ciąg do metodyHtml.fromHtml("html string");
. Również ogólnie te ciągi pochodzą z serwera (dynamiczne), ale nie często, jeśli lepiej jest przekazać ciąg tak, jak jest w metodzie, niż próbować usunąć tagi z ciągu.źródło
źródło
Stwórz globalną metodę, taką jak:
Możesz również użyć go w swojej aktywności / fragmencie, takich jak:
źródło
Zaimplementowałem to za pomocą widoku internetowego. W moim przypadku muszę załadować obraz z adresu URL wraz z tekstem w widoku tekstowym i to działa dla mnie.
źródło
Sugerowano przez różne odpowiedzi używać HTML klasę ramową jak sugeruje tutaj, ale niestety ta klasa ma różne zachowanie w różnych wersjach Androida i różnych bezadresowych błędów, jak wykazano w sprawach 214637 , 14778 , 235128 i 75953 .
Dlatego możesz użyć biblioteki kompatybilności do standaryzacji i wykonania kopii zapasowej klasy HTML w różnych wersjach Androida, która zawiera więcej wywołań zwrotnych elementów i stylów:
Chociaż jest podobny do klasy Html frameworka, konieczne były pewne zmiany sygnatur, aby umożliwić więcej wywołań zwrotnych. Oto przykład ze strony GitHub:
źródło
Za każdym razem, gdy piszesz niestandardowy widok tekstu, podstawowa funkcja ustawiania tekstu HTML zniknie z niektórych urządzeń.
Musimy więc wykonać następujące dodatkowe kroki, aby to działało
źródło
aktualizacja odpowiedzi powyżej
źródło
Użyj poniższego kodu, aby uzyskać rozwiązanie:
Metoda użyteczna
źródło
Utworzono rozszerzenia Kotlin do konwersji HTML z String -
źródło
Pozwól, że zasugeruję nieco pospieszne, ale genialne rozwiązanie! Pomysł zaczerpnąłem z tego artykułu i dostosowałem go do systemu Android. Zasadniczo używasz
WebView
i wstawiasz HTML, który chcesz pokazać i edytować w edytowalnym znaczniku div. W ten sposób, gdy użytkownik stuknie,WebView
pojawi się klawiatura i umożliwia edycję. Po prostu dodajesz JavaScript, aby odzyskać edytowany kod HTML i voila!Oto kod:
I tutaj jest element jako Gist.
Uwaga: Nie potrzebowałem wywołania zwrotnego zmiany wysokości w stosunku do oryginalnego rozwiązania, więc tutaj go brakuje, ale w razie potrzeby można go łatwo dodać.
źródło
Jeśli używasz
androidx.
* klas w swoim projekcie, powinieneś użyćHtmlCompat.fromHtml(text, flag)
. Źródło metody to:@NonNull public static Spanned fromHtml(@NonNull String source, @FromHtmlFlags int flags) { if (Build.VERSION.SDK_INT >= 24) { return Html.fromHtml(source, flags); } //noinspection deprecation return Html.fromHtml(source); }
Jest to lepszy sposób niż Html.fromHtml, ponieważ jest mniej kodu, tylko jedna linia i zalecany sposób jego użycia.
źródło
Możesz użyć prostej funkcji rozszerzenia Kotlin w następujący sposób:
I użycie:
źródło
Po prostu użyj:
źródło