Я использую Html.fromHtml
для просмотра HTML в TextView
.
Spanned result = Html.fromHtml(mNews.getTitle());
...
...
mNewsTitle.setText(result);
Но Html.fromHtml
сейчас устарела в Android N +
Что / Как мне найти новый способ сделать это?
Я использую Html.fromHtml
для просмотра HTML в TextView
.
Spanned result = Html.fromHtml(mNews.getTitle());
...
...
mNewsTitle.setText(result);
Но Html.fromHtml
сейчас устарела в Android N +
Что / Как мне найти новый способ сделать это?
обновление : как @Andy упоминалось ниже, Google создал, HtmlCompat
который можно использовать вместо метода ниже. Добавьте эту зависимость implementation 'androidx.core:core:1.0.1
в файл build.gradle вашего приложения. Убедитесь, что вы используете последнюю версию androidx.core:core
.
Это позволяет вам использовать:
HtmlCompat.fromHtml(html, HtmlCompat.FROM_HTML_MODE_LEGACY);
Вы можете прочитать больше о различных флагах в HtmlCompat-документации.
оригинальный ответ:
в Android N они представили новый Html.fromHtml
метод. Html.fromHtml
теперь требуется дополнительный параметр с именем flags. Этот флаг дает вам больше контроля над тем, как отображается ваш HTML.
На Android N и выше вы должны использовать этот новый метод. Более старый метод устарел и может быть удален в будущих версиях Android.
Вы можете создать свой собственный метод Util, который будет использовать старый метод в более старых версиях и новый метод в Android N и выше. Если вы не добавите версию, проверьте, что ваше приложение будет работать на более низких версиях Android. Вы можете использовать этот метод в своем классе 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);
}
}
Вы можете преобразовать HTML.FROM_HTML_MODE_LEGACY
в дополнительный параметр, если хотите. Это дает вам больше контроля над тем, какой флаг использовать.
Вы можете прочитать больше о различных флагах в документации класса Html.
Html.FROM_HTML_MODE_LEGACY
//noinspection deprecation
комментарий прямо подelse
заголовком, чтобы избежать предупреждений.У меня было много этих предупреждений, и я всегда использую FROM_HTML_MODE_LEGACY, поэтому я создал вспомогательный класс с именем HtmlCompat, содержащий следующее:
источник
Сравните флаги fromHtml ().
источник
Или вы можете использовать
androidx.core.text.HtmlCompat
:HtmlCompat документы
источник
Если вам повезло с разработкой на Kotlin, просто создайте функцию расширения:
И тогда это так приятно использовать везде:
источник
Spanned
иreturn
fromHtml
Вы должны использовать FROM_HTML_MODE_LEGACY
Код
Для Котлина
Вызов
источник
HtmlCompat.fromHtml("textWithHtmlTags", HtmlCompat.FROM_HTML_MODE_LEGACY)
Из официального документа:
https://developer.android.com/reference/android/text/Html.html
источник
Если вы используете Kotlin , я добился этого с помощью расширения Kotlin:
Тогда назовите это как:
источник
Чтобы расширить ответ от @Rockney и @ k2col, улучшенный код может выглядеть так:
Где то
CompatUtils.isApiNonLowerThan
:Разница в том, что нет никакой дополнительной локальной переменной, а амортизация только в
else
ветке. Так что это не будет подавлять все методы, кроме одной ветви.Это может помочь, когда Google примет решение в некоторых будущих версиях Android отказаться от даже этого
fromHtml(String source, int flags)
метода.источник
Ты можешь использовать
подавить проверку только для одного утверждения, но не для всего метода.
источник
Базовый класс был изменен, чтобы требовать флаг для информирования
fromHtml()
как обрабатывать разрывы строк. Это было добавлено в Nougat и затрагивает проблему несовместимости этого класса в версиях Android.Я опубликовал библиотеку совместимости для стандартизации и бэкпорта класса и включения дополнительных обратных вызовов для элементов и стилей:
Несмотря на то, что он похож на класс Html фреймворка, некоторые сигнатурные изменения потребовались, чтобы разрешить больше обратных вызовов. Вот пример со страницы GitHub:
источник
minSdkVersion 15
иtargetSdkVersion 23
получаю ошибку сборки для values-v24.xml :Error:(3) Error retrieving parent for item: No resource found that matches the given name 'android:TextAppearance.Material.Widget.Button.Borderless.Colored'.
Ваша библиотека, очевидно, нацелена на уровень API 25. Как я все еще могу это использовать?Вот мое решение.
источник
просто сделайте функцию:
источник
Попробуйте эту небольшую строку кода
источник
Попробуйте следующее для поддержки основных тегов HTML, включая теги ul ol li. Создайте обработчик тега, как показано ниже
Установите текст на активность, как показано ниже
И HTML-текст в файлах строк ресурсов как
<! [CDATA [... raw html data ...]]>
источник