aktualizacja : jak wspomniano poniżej @Andy , stworzył Google, HtmlCompat
którego można użyć zamiast poniższej metody. Dodaj tę zależność implementation 'androidx.core:core:1.0.1
do pliku build.gradle swojej aplikacji. Upewnij się, że używasz najnowszej wersjiandroidx.core:core
.
Pozwala to na użycie:
HtmlCompat.fromHtml(html, HtmlCompat.FROM_HTML_MODE_LEGACY);
Możesz przeczytać więcej o różnych flagach w dokumentacji HtmlCompat
oryginalna odpowiedź: w
Androidzie N wprowadzono nową Html.fromHtml
metodę. Html.fromHtml
wymaga teraz dodatkowego parametru o nazwie flagi. Ta flaga zapewnia większą kontrolę nad sposobem wyświetlania kodu HTML.
W systemie Android N i nowszym powinieneś użyć tej nowej metody. Starsza metoda jest przestarzała i może zostać usunięta w przyszłych wersjach Androida.
Możesz utworzyć własną metodę Util, która będzie używać starej metody w starszych wersjach i nowszej metody w systemie Android N i nowszych. Jeśli nie dodasz wersji, sprawdź, czy aplikacja działa na niższych wersjach Androida. Możesz użyć tej metody w swojej klasie Util.
@SuppressWarnings("deprecation")
public static Spanned fromHtml(String html){
if(html == null){
// return an empty spannable if the html is null
return new SpannableString("");
}else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
// FROM_HTML_MODE_LEGACY is the behaviour that was used for versions below android N
// we are using this flag to give a consistent behaviour
return Html.fromHtml(html, Html.FROM_HTML_MODE_LEGACY);
} else {
return Html.fromHtml(html);
}
}
Jeśli chcesz, możesz przekonwertować parametr HTML.FROM_HTML_MODE_LEGACY
na dodatkowy. Daje to większą kontrolę nad tym, której flagi użyć.
Możesz przeczytać więcej o różnych flagach w
dokumentacji klasy HTML
Html.FROM_HTML_MODE_LEGACY
//noinspection deprecation
komentarza tuż podelse
ostrzeżeniem, aby uniknąć ostrzeżeń.Miałem wiele takich ostrzeżeń i zawsze używam FROM_HTML_MODE_LEGACY, więc stworzyłem klasę pomocniczą o nazwie HtmlCompat zawierającą:
źródło
Porównaj flagi fromHtml ().
źródło
Lub możesz użyć
androidx.core.text.HtmlCompat
:Dokumenty HtmlCompat
źródło
Jeśli masz szczęście rozwijać się w Kotlin, po prostu utwórz funkcję rozszerzenia:
A potem tak słodko jest używać go wszędzie:
źródło
Spanned
ireturn
fromHtml
Powinieneś użyć FROM_HTML_MODE_LEGACY
Kod
Dla Kotlina
Połączenie
źródło
HtmlCompat.fromHtml("textWithHtmlTags", HtmlCompat.FROM_HTML_MODE_LEGACY)
Z oficjalnego dokumentu:
https://developer.android.com/reference/android/text/Html.html
źródło
Jeśli używasz Kotlin , osiągnąłem to, używając rozszerzenia Kotlin:
Następnie nazwij to tak:
źródło
Aby rozszerzyć odpowiedź z @Rockney i @ k2col, ulepszony kod może wyglądać następująco:
Gdzie
CompatUtils.isApiNonLowerThan
:Różnica polega na tym, że nie ma dodatkowej zmiennej lokalnej, a wycofanie następuje tylko w
else
oddziale. Dlatego nie spowoduje to pominięcia wszystkich metod oprócz pojedynczej gałęzi.Może to pomóc, gdy Google zdecyduje się w niektórych przyszłych wersjach Androida na wycofanie nawet tej
fromHtml(String source, int flags)
metody.źródło
Możesz użyć
aby ukryć inspekcję tylko dla pojedynczej instrukcji, ale nie dla całej metody.
źródło
Klasa frameworka została zmodyfikowana, aby wymagać flagi do informowania
fromHtml()
sposobie przetwarzania linii. Zostało to dodane w Nougat i dotyczy tylko problemu niezgodności tej klasy we wszystkich wersjach Androida.Opublikowałem bibliotekę kompatybilności, aby ustandaryzować i backportować klasę oraz 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
minSdkVersion 15
itargetSdkVersion 23
pojawia się błąd kompilacji dla wartości v24.xml :Error:(3) Error retrieving parent for item: No resource found that matches the given name 'android:TextAppearance.Material.Widget.Button.Borderless.Colored'.
Twoja biblioteka jest oczywiście docelowa na poziomie API 25. Jak mogę go nadal używać?Oto moje rozwiązanie.
źródło
po prostu wykonaj funkcję:
źródło
Spróbuj wykonać poniższe czynności, aby obsługiwać podstawowe tagi HTML, w tym tagi ul ol li. Utwórz moduł obsługi znaczników, jak pokazano poniżej
Ustaw tekst w polu Aktywność, jak pokazano poniżej
I tekst HTML w plikach ciągów zasobów jako
<! [CDATA [... surowe dane HTML ...]]>
źródło