我使用html . fromhtml在TextView中查看html。
Spanned result = Html.fromHtml(mNews.getTitle());
...
...
mNewsTitle.setText(result);
但是Html.fromHtml现在在Android N+中已弃用
我怎样才能找到做这件事的新方法?
我使用html . fromhtml在TextView中查看html。
Spanned result = Html.fromHtml(mNews.getTitle());
...
...
mNewsTitle.setText(result);
但是Html.fromHtml现在在Android N+中已弃用
我怎样才能找到做这件事的新方法?
当前回答
来自官方文件:
fromHtml(String)方法在API级别24中已弃用。使用fromHtml(String, int) 代替。 to_html_段落_lines_continuous选项toHtml(span, int):将以“\n”分隔的连续文本行换行<p> 元素。 to_html_段落_lines_individual选项toHtml(span, int):将每一行由'\n'分隔的文本包装在<p>或<li>内 元素。
https://developer.android.com/reference/android/text/Html.html
其他回答
你可以使用
//noinspection deprecation
return Html.fromHtml(source);
仅对单个语句而不是整个方法抑制检查。
来自官方文件:
fromHtml(String)方法在API级别24中已弃用。使用fromHtml(String, int) 代替。 to_html_段落_lines_continuous选项toHtml(span, int):将以“\n”分隔的连续文本行换行<p> 元素。 to_html_段落_lines_individual选项toHtml(span, int):将每一行由'\n'分隔的文本包装在<p>或<li>内 元素。
https://developer.android.com/reference/android/text/Html.html
如果您有幸在Kotlin上开发, 只需创建一个扩展函数:
fun String.toSpanned(): Spanned {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
return Html.fromHtml(this, Html.FROM_HTML_MODE_LEGACY)
} else {
@Suppress("DEPRECATION")
return Html.fromHtml(this)
}
}
而且用在任何地方都很贴心:
yourTextView.text = anyString.toSpanned()
更新: 正如下面提到的@Andy谷歌已经创建了HtmlCompat,可以用来代替下面的方法。添加这个依赖实现androidx.core:core:1.0.1 建造。确保你使用的是androidx.core:core的最新版本。
这允许你使用:
HtmlCompat.fromHtml(html, HtmlCompat.FROM_HTML_MODE_LEGACY);
你可以在htmlcompat文档中阅读更多关于不同标志的内容
最初的回答: 在Android N中,他们引入了一个新的Html.fromHtml方法。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类文档
这是我的解决方案。
if (Build.VERSION.SDK_INT >= 24) {
holder.notificationTitle.setText(Html.fromHtml(notificationSucces.getMessage(), Html.FROM_HTML_MODE_LEGACY));
} else {
holder.notificationTitle.setText(Html.fromHtml(notificationSucces.getMessage()));
}