【问题标题】:Android Html.fromHtml() does not work correctly on nested text styleAndroid Html.fromHtml() 在嵌套文本样式上无法正常工作
【发布时间】:2021-07-27 13:55:39
【问题描述】:

我想显示 HTML

"<html><body><font color=\"black\">
In the name of <font color=\"blue\"><b> God</b></font>
the compassionate, the merciful</font></body><html>"

在文本视图中。所以我用了Html.fromHtml(),但是输出和浏览器不同。

不同的是,“上帝”这个词在 TextView 中不会以蓝色出现。

代码:

textView.setText("<html><body><font color=\"black\">
  In the name of <font color=\"blue\"><b> God</b></font>
  the compassionate, the merciful</font></body><html>");

【问题讨论】:

  • 另外如果你有浏览器不同的截图,请分享
  • 如果可能的话,还有移动和浏览器输出的屏幕截图。
  • 字体已被废弃。使用跨度

标签: android html


【解决方案1】:

Html.fromHtml(String) 不支持所有 HTML 标签

允许的 HTML 标签列表:

  • br
  • p
  • div
  • em
  • b
  • dfn
  • 字体
  • 块引用
  • tt
  • 一个
  • 支持

【讨论】:

  • 那么,问题不在于支持或不支持哪些标签。
  • 这打击。 HTML.fromHTML() 理解 ,但它不能理解嵌套跨度,所以我必须只写非 DRY 的非嵌套跨度
【解决方案2】:

试试这样:

textView.setText(Html.fromHtml("<html><body>In the name of<font color=blue><b> God </b></font>the compassionate, the merciful</body><html>"));

注意:黑色是默认颜色,因此您不必为黑色使用&lt;font&gt;标签。

如果您想使用,请以正确的方式完成标签,例如(例如 GRAYBLUE):

textView.setText(Html.fromHtml("<html><body><font color=gray>In the name of </font><font color=blue><b> God </b></font><font color=gray>the compassionate, the merciful</font></body><html>"));

【讨论】:

  • 这可行,但不能回答问题。似乎fromHtml 有一个错误并且无法正确处理嵌套颜色并且没有解决方案(通常您从外部源获取 HTML 代码并且无法修改它),除了自定义处理程序或预处理代码
  • Android Html 库中有一个小限制,这意味着所有字体打开标记都必须有相应的结束标记。这不是常规 html 的要求,因为它暗示新标签将隐式终止前面的字体标签。
【解决方案3】:

看起来这个问题已在 HtmlCompat 中得到解决。所以尝试使用它而不是旧的不推荐使用的Html

import androidx.core.text.HtmlCompat;

....

HtmlCompat.fromHtml(stringVar, HtmlCompat.FROM_HTML_MODE_LEGACY);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-05-22
    • 2014-05-13
    • 1970-01-01
    • 1970-01-01
    • 2015-02-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多