我使用html . fromhtml在TextView中查看html。

Spanned result = Html.fromHtml(mNews.getTitle());
...
...
mNewsTitle.setText(result);

但是Html.fromHtml现在在Android N+中已弃用

我怎样才能找到做这件事的新方法?


当前回答

或者你可以使用androidx.core.text.HtmlCompat:

HtmlCompat.fromHtml("<b>HTML</b>", HtmlCompat.FROM_HTML_MODE_LEGACY)

HtmlCompat纪录片

其他回答

fromHtml

此方法在API级别24中已弃用。

你应该使用FROM_HTML_MODE_LEGACY

用空行(两个换行符)分隔块级元素 人物)介于两者之间。这是在N之前的遗留行为。

Code

if (Build.VERSION.SDK_INT >= 24)
        {
            etOBJ.setText(Html.fromHtml("Intellij \n Amiyo",Html.FROM_HTML_MODE_LEGACY));

         }
 else
        {
           etOBJ.setText(Html.fromHtml("Intellij \n Amiyo"));
        }

Kotlin的

fun setTextHTML(html: String): Spanned
    {
        val result: Spanned = if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.N) {
            Html.fromHtml(html, Html.FROM_HTML_MODE_LEGACY)
        } else {
            Html.fromHtml(html)
        }
        return result
    }

Call

 txt_OBJ.text  = setTextHTML("IIT Amiyo")

如果你正在使用Kotlin,我通过使用Kotlin扩展来实现这一点:

fun TextView.htmlText(text: String){
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
        setText(Html.fromHtml(text, Html.FROM_HTML_MODE_LEGACY))
    } else {
        setText(Html.fromHtml(text))
    }
}

然后像这样称呼它:

textView.htmlText(yourHtmlText)

框架类已被修改为需要一个标志来通知fromHtml()如何处理换行符。这是在Nougat中添加的,并且只涉及到这个类在Android版本之间不兼容的挑战。

我已经发布了一个兼容性库来标准化和后移植类,并包括更多元素和样式的回调:

https://github.com/Pixplicity/HtmlCompat

虽然它类似于框架的Html类,但需要一些签名更改以允许更多回调。以下是来自GitHub页面的示例:

Spanned fromHtml = HtmlCompat.fromHtml(context, source, 0);
// You may want to provide an ImageGetter, TagHandler and SpanCallback:
//Spanned fromHtml = HtmlCompat.fromHtml(context, source, 0,
//        imageGetter, tagHandler, spanCallback);
textView.setMovementMethod(LinkMovementMethod.getInstance());
textView.setText(fromHtml);

只需要创建一个函数:

public Spanned fromHtml(String str){
  return Build.VERSION.SDK_INT >= 24 ? Html.fromHtml(str, Html.FROM_HTML_MODE_LEGACY) : Html.fromHtml(str);
}

如果您有幸在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()