【问题标题】:Intercept background drawing/rendering in Android WebView在 Android WebView 中拦截背景绘图/渲染
【发布时间】:2020-04-21 14:41:56
【问题描述】:

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

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

【问题讨论】:

  • 你能把你的问题说得更清楚一点吗?我的意思是一些临时图像。您想在应用内显示网页视图(如对话框)还是什么?
  • 这和我描述的差不多 - WebView 是显示在应用程序顶部的装饰。像教程或hbbtv之类的东西。它在下面可见的本机应用程序的上下文中置换事物。
  • 我得到了你想要的,只需通过使用 webview 或 textview 制作自定义控件即可实现,它可以在研究日完成。

标签: android android-webview rendering


【解决方案1】:

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

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

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

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

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 页面,但是考虑到现在,大量用户已经转移到功能强大的设备上,它不会影响观众。

【讨论】:

  • 你确定这会使 html 背景无效吗?它确实使 WebView 透明,就像使默认的白色背景透明一样,但是如果页面具有自定义 html/css 背景,它仍然会显示:(
  • 哦? 这确实更接近我需要的,但有两个问题:1)我不想完全删除背景,因为它有时很重要,例如包含图像; 2) 喜欢的解决方案在中端设备上存在非常明显的延迟
  • @Kelevandos 更新了答案,由于 cmets 部分中的字符限制,无法发表评论
  • 我喜欢关于下载和修改背景的观点。它仍然不是我需要的完全解决方案,但如果没有其他问题出现,我会接受它作为赏金,因为它可以进一步工作。谢谢!至于设备评论 - 在我的情况下这不是真的有效,因为我的应用程序有一组特定的目标设备,其中一些非常非常慢:(
  • @Kelevandos 好的,对于 Webview 性能,您可以启用硬件加速,这可能会有所帮助,请查看 *.com/a/7528833/3497972