Webview 不显示带颜色的文本

Posted

技术标签:

【中文标题】Webview 不显示带颜色的文本【英文标题】:Webview doesn't display text with color 【发布时间】:2019-06-26 05:42:59 【问题描述】:

在我的应用中,我在 webview 中显示了一些 html 内容:

String webViewConent = 'this is some <span style="color:#2ecc71">sample</span> string'
webView.loadData(omowienie, "text/html; charset=utf-8", "UTF-8");

但是,在与其他事情相关的最后一次应用更新之后,对于某些用户来说,webview 无法正常工作。他们只看到 span 标签之前的字符串。该问题与任何特定的 android 版本无关。

【问题讨论】:

我在自己的应用中遇到了同样的问题,赞! 您尝试过 sample 吗? 不,html内容是通过我网站上的所见即所得编辑器创建的,它不允许字体标签...您什么时候遇到这个问题? 我明白了。我对这个字符串有同样的问题:<body style = \'font-family: Montserrat;文本对齐:居中; line-height: 1.5em\'>你有</font><span style =\'color: #00B460;字体大小:22pt\'> %1$d </span><span style =\'color: #FFFFFF; font-size: 16pt\'> 使用 Html.fromHtml 函数关闭锁 剩下的秒数。在某些设备上可以正常工作,而在其他设备上则不行 @NicolaGallazzi 似乎是由 webview 更新引起的 【参考方案1】:

同样的问题,我发现 base64 编码可以快速解决:

String base64 = android.util.Base64.encodeToString(html.getBytes("UTF-8"), android.util.Base64.DEFAULT);
mWebView.loadData(base64, "text/html; charset=utf-8", "base64");

【讨论】:

它已从我的 html 中移除颜色 这对我有用,也保留了颜色。我是否正确地假设,因为 auf 井号而需要编码? 在 html.getBytes("UTF-8") 上显示错误,无法识别 html 谢谢!这对我有用,但提到编码也让我想到了this answer,它提供了我认为更简单的another work-around。【参考方案2】:

我今天遇到了同样的问题。作为一个简单的解决方法,我将 CSS 中的十六进制颜色替换为 RGB 等效项。

之前

<span style="color: #3050c0">Some text</span>

之后

<span style="color: rgb(48, 80, 192)">Some text</span>

【讨论】:

这特别意味着数字符号(U + 0023)是问题,对吧?这是一个明显的解析器错误吗?我想知道它是记录在案的还是故意的。【参考方案3】:

我发现this answer 中关于 WebView 编码的方法似乎可以解决这个问题。不要使用loadData,试试loadDataWithBaseURL

webview.loadDataWithBaseURL(null, html, "text/html; charset=utf-8", "utf8", null)

【讨论】:

【参考方案4】:

我也有同样的问题。我的应用在 span 标签后不显示文本。有些设备工作正常,但有些设备不工作。点赞!

<p><span style="color:#0000CD"><strong>Materials:</strong></span></p>

根据我的研究和实验,我已在我的设备上禁用了 Android System Webview 应用程序。由于这个过程,我的应用程序正常工作。但是,对我来说,这不是一个解决方案。你有什么想法?

【讨论】:

第一次遇到这个问题是什么时候?就我而言,这是 2 天前 @mik.ro 是的,这已在 2 天前开始,并且仍在继续。我正在寻找解决这个问题的方法,但我找不到方法。我希望我们能解决这个问题。 我想,这个问题出现在Android System Webview。我有两个设备。我检查了他们的 android 系统 webview 应用程序版本,我发现他们的版本不同。此外,谷歌已于 2019 年 1 月 29 日发布了新版本。但我不知道如何解决这个问题。 在我的其他应用程序中,webview 在某些情况下也不起作用。我很确定它已连接到最新的 webview 更新【参考方案5】:

我认为问题在于 Android Webview System 中的新更新。旧版本对我有用。

我这里的替代解决方案是在您的手机中卸载 Android Webview System,以便您可以使用默认版本(如果您的应用上传到 Google Playstore 并且有很多用户,此解决方案并不理想)

第二个选项是您可以同时删除html中的颜色和背景颜色代码,它会起作用(我认为这是Android Webview System的错误,我们只需要等他们解决问题)

【讨论】:

【参考方案6】:

我也有同样的问题。可能是Android WebView系统的bug,解决方法是使用字体标签给文字上色。

String webViewConent = "this is some <font style="color:green">sample</font> string";

注意:此代码不适用于十六进制格式颜色

【讨论】:

【参考方案7】:

我没有找到解决办法,但我能够解决使用原始 HTML 更改字符串的问题。只要您已经知道要显示的颜色,这可能对其他人有所帮助:

String newString = originalString.replaceAll("color:#888888", "color:gray");

【讨论】:

以上是关于Webview 不显示带颜色的文本的主要内容,如果未能解决你的问题,请参考以下文章

使用 webview 显示来自 sdcard 的图像不起作用

WebView 不显示内容

在设备上的 WebView 中更改 PDF 周围的背景颜色

ios Flutter应用程序的webview中的键盘不显示

shell echo 文本颜色

清除内容:基础层与显示的用于清除 android 中的 webview 内容的 logcat 不匹配