android - 在 Android WebView 中拦截背景绘图/渲染
问题描述
我正在尝试实现一个 WebView,在我的应用程序之上显示一些额外的内容。只要网络应用程序没有纯色背景颜色/图像,它就可以很好地工作。由于我无法控制这些扩展应用程序,因此有时会出现这种情况。
问题是 - 有没有办法拦截 Android WebView 中的背景绘图?我的想法是,如果我能抓住它,我可以用透明替换一些矩形,这样我的应用程序就可以从下面显示。
解决方案
您可以尝试使 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 页面,但考虑到现在,大量用户已经转移到功能强大的设备上,它不会影响观众。
推荐阅读
- symfony - API 平台授权与身份验证
- vue.js - 使用 vue.js 的数组数据问题
- sql - Create table as select from 正在创建重复记录
- java - 当我们使用 git 合并或分支到 master 时,所有类都会发生重构吗
- c# - C# 指针 Console.WriteLine 中的 X 表示什么?
- javafx - 如何区分 tableView 上的服务器更新和用户更新?
- php - 如何修复 Xdebug PHP 中的“未知错误”错误
- html - 无法使用 css/html 并排放置图像和文本
- c - C编程中的有符号字符十进制到十六进制转换
- python - Django Rest Framework - 测试 client.login 不登录用户,ret 匿名用户