首页 > 解决方案 > 在 Android WebView 中拦截背景绘图/渲染

问题描述

我正在尝试实现一个 WebView,在我的应用程序之上显示一些额外的内容。只要网络应用程序没有纯色背景颜色/图像,它就可以很好地工作。由于我无法控制这些扩展应用程序,因此有时会出现这种情况。

问题是 - 有没有办法拦截 Android WebView 中的背景绘图?我的想法是,如果我能抓住它,我可以用透明替换一些矩形,这样我的应用程序就可以从下面显示。

标签: androidandroid-webviewrendering

解决方案


您可以尝试使 web 视图背景透明,它会使 HTML 的背景颜色无效

webView.setBackgroundColor(Color.TRANSPARENT);
webView.setLayerType(WebView.LAYER_TYPE_SOFTWARE, null);

确保在加载 URL 页面时调用它。

如果它没有覆盖您的自定义 CSS/HTML 背景,那么您可以使用 Webview 的 Javascript 注入功能,在此加载 Webview 时,您可以操作其属性,例如删除具有特定 id 的按钮、更改背景颜色等。检查以下链接以了解您的用例。

https://mobikul.com/android-inject-javascript-into-webview/

https://medium.com/@filipe.batista/inject-javascript-into-webview-2b702a2a029f

https://medium.com/appunite-edu-collection/webview-with-injected-js-script-13eb1e0257c9

您在评论框中的查询答案,由于评论中的字符限制,无法回答。

1.1)如果你不想完全去除背景->假设有任何HTML颜色背景假设#FF0000,并且你想让它变得有点透明,你可以获取颜色,例如增加这种颜色的透明度(# ABFF0000),再次将其设置为 HTML 背景。

1.2)如果您在 HTML 中有一个图像作为背景,并且您不想完全删除它,那么您将必须获取它的 URL,下载它,处理它以使其变得不透明,然后在 Webview 中再次本地设置它HTML 作为背景,但这会占用太多内存,还有一个解决方案正如我之前提到的,让整个 Webview 有点透明,但它会使每个 UI 元素的所有内容都透明,比如文本等。

2)是的,这是这种方法的权衡,我们在 Webview 中操作已经加载的 HTML 页面,但考虑到现在,大量用户已经转移到功能强大的设备上,它不会影响观众。


推荐阅读