我有自定义TextView
,以显示HTML文字。对于前牛轧糖设备,它可以工作。正如你在Nougat上所知,fromHtml已被弃用,它需要一个标志..所以我的代码是这样的
Spannable s = getRichText(text);
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.N) {
super.setText(Html.fromHtml(s.toString(), Html.FROM_HTML_MODE_COMPACT, this, new HtmlHandler(getContext())), BufferType.SPANNABLE);
} else {
super.setText(Html.fromHtml(s.toString(), this, new HtmlHandler(getContext())), BufferType.SPANNABLE);
}
问题在于,HtmlHandler
类永远不会被调用。 (我已经尝试过所有的旗帜)。
在HtmlHandler
我处理标签和样式,例如background-color
,color
等等。我已经实现了从rgb
,rgba
,hls
等处获取颜色。但是在Nougat上它只接受带有十六进制的颜色,因为在Nougat上,fromHTML
可以“读取”颜色并告诉他们。为什么会这样?我怎样才能保持颜色的方式?如果您不了解某些内容或需要更多详细信息,请与我们联系。
我用于测试的html是
<p><strong>Server</strong><u> message</u><strong><u>!!!</strong></u> <span style="background-color: rgb(255,0,0);">Not working on Nugat</span></p>
答案 0 :(得分:5)
Html.fromHtml()
只会针对TagHandler
无法识别的HTML代码调用fromHtml()
。在您的示例HTML中,您有:
<p>
<strong>
<u>
<span>
在您的第一条评论中,您还提到了div
。
其中fromHtml()
处理<p>
,<strong>
和<u>
以及at least 2010,如果不是更早的话。 Android 6.0中的fromHtml()
也处理<div>
(请参阅the source中的第488-489行),我忘记了支持的后退方式。 <* 1}}不会为任何这些标记调用,而且这种行为并不是特别新的。
Android 7.0添加了对TagHandler
的支持(请参阅the 7.1 source中的第804-805行),因此期望为<span>
调用TagHandler
的代码的行为会有所不同在Android 7.0和之前版本之间。
通常,支持的标记列表未记录。欢迎谷歌随时更改支持标签的名单。
您的选择是:
与之共存
将源代码添加到您喜欢的某些<span>
,将其重构到您自己的包中,然后使用该副本,根据需要进行修改
查找您更喜欢的其他HTML到Html.java
源代码