Html.fromHtml Nougat 不调用自定义 HtmlHandler
Html.fromHtml on Nougat doesn't call custom HtmlHandler
我有一个自定义 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
class 永远不会被调用。 (我已经尝试了所有标志)。
在 HtmlHandler
上,我处理标签和样式,例如 background-color
、color
等等。我已经实现了从 rgb
、rgba
、hls
等获取颜色。但是在牛轧糖上它只接受十六进制颜色,因为在牛轧糖上,fromHTML
可以 "read" 颜色并显示它们。为什么会这样?我怎样才能保持颜色的方式?如果您不明白什么,或需要更多详细信息,请告诉我。
我用来测试的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>
Html.fromHtml()
只会为 fromHtml()
无法识别的 HTML 标签调用您的 TagHandler
。在您的示例 HTML 中,您有:
<p>
<strong>
<u>
<span>
并且在您的第一条评论中,您还提到了 div
。
其中,fromHtml()
自 at least 2010, if not earlier. fromHtml()
in Android 6.0 also handles <div>
(see lines 488-489 in the source 以来处理了 <p>
、<strong>
和 <u>
),我忘记了这种支持是如何进行的。您的 TagHandler
不会为这些标签中的任何一个调用,并且这种行为并不是特别新。
Android 7.0 添加了对 <span>
的支持(请参阅 the 7.1 source 的第 804-805 行),因此需要为 [= 调用 TagHandler
的代码16=] 在 Android 7.0 和以前的版本之间会有不同的表现。
一般来说,支持的标签列表没有记录。 Google 欢迎随时更改支持标签的名单。
您的选择是:
接受它
获取一些你喜欢的 Html.java
的源代码,将其重构到你自己的包中,然后使用该副本,根据需要进行修改
找一些你比较喜欢的HTML-to-Spannable
源码
我有一个自定义 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
class 永远不会被调用。 (我已经尝试了所有标志)。
在 HtmlHandler
上,我处理标签和样式,例如 background-color
、color
等等。我已经实现了从 rgb
、rgba
、hls
等获取颜色。但是在牛轧糖上它只接受十六进制颜色,因为在牛轧糖上,fromHTML
可以 "read" 颜色并显示它们。为什么会这样?我怎样才能保持颜色的方式?如果您不明白什么,或需要更多详细信息,请告诉我。
我用来测试的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>
Html.fromHtml()
只会为 fromHtml()
无法识别的 HTML 标签调用您的 TagHandler
。在您的示例 HTML 中,您有:
<p>
<strong>
<u>
<span>
并且在您的第一条评论中,您还提到了 div
。
其中,fromHtml()
自 at least 2010, if not earlier. fromHtml()
in Android 6.0 also handles <div>
(see lines 488-489 in the source 以来处理了 <p>
、<strong>
和 <u>
),我忘记了这种支持是如何进行的。您的 TagHandler
不会为这些标签中的任何一个调用,并且这种行为并不是特别新。
Android 7.0 添加了对 <span>
的支持(请参阅 the 7.1 source 的第 804-805 行),因此需要为 [= 调用 TagHandler
的代码16=] 在 Android 7.0 和以前的版本之间会有不同的表现。
一般来说,支持的标签列表没有记录。 Google 欢迎随时更改支持标签的名单。
您的选择是:
接受它
获取一些你喜欢的
Html.java
的源代码,将其重构到你自己的包中,然后使用该副本,根据需要进行修改找一些你比较喜欢的HTML-to-
Spannable
源码