需求描述:使用WebView加载一个链接,实现有图、无图模式之间的切换

  • 关于无图模式的2种理解
  1. 阻塞图片的加载,网页上图片以一种灰底的形式存在
  2. 完全实现图片的隐藏

1. 阻塞图片的加载

这个就比较简单了,WebView本身提供了api,这种方式一般也会作为优化网页显示速率的一种方式

    // 阻塞图片加载wvWeb.settings.blockNetworkImage = true

2. 完全实现图片的隐藏

WebView本身并没有提供相关的方法,只能另寻出路,我们知道网页是以html语言编写的,我们只要拿到了网页源码,别说是图片隐藏了,简直可以为所欲为,既然方案出来了,就不要只限于想,一定要动手去淦。

在这里提供两种获取网页源码的方式

  1. 通过WebView加载一段js代码的方式获取
  2. 直接请求链接,下载其源码
2.1 通过WebView加载一段js代码的方式获取

直接上码

    dataBinding.wvWeb.addJavascriptInterface(InJavaScriptLocalObj(), "java_obj")dataBinding.wvWeb.webViewClient = object : WebViewClient() {override fun shouldOverrideUrlLoading(view: WebView?,request: WebResourceRequest?): Boolean {view?.loadUrl(request?.url.toString())return true}// 拦截当前链接内所有请求,其实在这个方式也可以实现 阻塞图片的加载// 问题是无法根据一个统一的规则去判断这个链接是否是图片(如果是加载的公司自己的h5,完全可以制定这种规则)override fun shouldInterceptRequest(view: WebView?,request: WebResourceRequest?): WebResourceResponse? {Log.i(TAG, "shouldInterceptRequest: ${request?.url.toString()}")if (request?.url.toString()是图片)return WebResourceResponse(null, null, null)elsereturn super.shouldInterceptRequest(view, request)}// 页面加载完成时的回调override fun onPageFinished(view: WebView?, url: String?) {view?.loadUrl("javascript:window.java_obj.getSource('<head>'+" +"document.getElementsByTagName('html')[0].innerHTML+'</head>');")super.onPageFinished(view, url)}}inner class InJavaScriptLocalObj {@JavascriptInterfacefun getSource(src: String?) {Log.i(TAG, "source: $src")}}
2.2 直接请求链接,下载其源码

完全可以使用当时项目中的请求框架去下载网页源码,这里使用的是jsoup三方库,这个库不仅可以获取源码,还可以解析处理html,提供了一整套非常省力的api,总之是一个好库,对于我这种对前端技术不咋熟悉还是非常nice的,具体使用自行google吧。
当我们拿到了html文本,就可以随心所欲了。
但是在测试过程中,微信公众号中的链接需要特殊处理。代码中有解释,请看

【记录】Android关于WebView无/有图模式切换实现方案相关推荐

  1. Android设置webView无图模式

    代码示例: webSetting.setBlockNetworkImage(true); // 设置无图模式

  2. android的webview控件载入网页显示速度慢的究极解决方案,【转】Android的WebView控件载入网页显示速度慢的究极解决方案...

    Android客户端中混搭HTML页面,会出现虽然HTML内容载入完成,标题也正常显示,但是整个网页需要等到近秒(甚至更多)时间才会显示出来.研究了很久,搜遍了国外很多网站,也看过PhoneGap的代 ...

  3. Android 启动优化(一) - 有向无环图

    前言 说到 Android 启动优化,大家第一时间可能会想到异步加载.将耗时任务放到子线程加载,等到所有加载任务加载完成之后,再进入首页. 多线程异步加载方案确实是 ok 的.但如果遇到前后依赖的关系 ...

  4. 【数据结构学习记录22】——有向无环图及其应用

    有向无环图及其应用 一.有向无环图的概念 二.拓扑排序(AOV网) 1.概念 2.偏序与全序 a).偏序 b).全序 c).偏序与全序的区别 3.拓扑有序 4.拓扑排序的过程 三.关键路径(AOE网) ...

  5. Android开发-WebView/WebViewClient/WebChromeClient简介 API详述 【一】

    老早之前就想总结下Webview相关的知识点了,因为互联网大潮中,很多APP都会使用到Webview,像那些不计其数的电商APP,无一例外的使用Webview:或者一些非电商APP中的像广告页面,注册 ...

  6. android培训内容明细,记录Android开发学习

    记录Android开发学习 Menu菜单学习 1.掌握Android中菜单的创建. 2.掌握Intent信使组件. 创建菜单Menu 我们模仿微信菜单栏学习,创建一个于微信菜单栏相似的菜单 那么我们应 ...

  7. android studio光标变成黑块,解决Android Studio 代码无提示无颜色区分问题

    解决Android Studio 代码无提示无颜色区分问题 一.问题 ①java代码没有颜色区分,统一黑色 ②代码不会联想提示,原来打前几个字母便会联想到后面的内容 二.解决 打开File,将Powe ...

  8. android webview调js方法,Android中WebView与H5的交互,Native与JS方法互调

    项目中经常用到WebView与H5的交互,一个是H5调本地方法,一个是本地调H5方法,在此记录一下. 首先,启用JS支持 //启用js支持 webSettings.setJavaScriptEnabl ...

  9. Android【WebView】

    WebView全面解析 简介 WebView是android中一个非常重要的控件,它的作用是用来展示一个web页面.它使用的内核是webkit引擎,4.4版本之后,直接使用Chrome作为内置网页浏览 ...

最新文章

  1. OSPF 协议中各种邻居状态的含义是什么?
  2. 【Leetcode】376. Wiggle Subsequence
  3. 指针做形参,形参的传递详解
  4. Linux管理员常用的组合命令
  5. php ezsql,ezSQL PHP数据库操作类库
  6. 云服务器的安全组各个端口代表什么意思?
  7. 【大数据部落】R在GIS中用ggmap地理空间数据分析
  8. iOS开发人员需要了解的苹果开发者账号与邓白氏编码
  9. 多媒体计算机的扫描仪属于感觉媒体吗,多媒体计算机中的扫描仪属于感觉媒体...
  10. 关于美图秀秀的flash在线版
  11. windows上连接ubuntu的向日葵,总是显示正在连接,马上就是连接已断开
  12. 五. python 字符串方法函数
  13. Java二维数组的错误写法分析
  14. 聊聊HTTPS环境DNS优化:美图App请求耗时节约近半案例
  15. html制作国字布局,各种经典布局--“国”字布局
  16. 浙教版数学作业本,参考答案如此下载
  17. c语言程序设计新编教程答案钱雪忠,新编C语言程序设计教程
  18. 嵌入式工程师是怎样炼成的(六)---- 我要考研
  19. python字典的长度怎么计算_关于如何知道python对象的字节大小,如数组和字典?:如何知道python对象的字节大小,如数组和字典? – 简单的方法...
  20. 分布式和集群的区别和联系

热门文章

  1. OpenCV彩色图像像素读取与表示
  2. java原子性是什么,java 原子性 可见性 有序性
  3. 新手如何选择短视频平台,平台变现模式都有哪些?丨国仁网络资讯
  4. hmacsha256 java_java生成HMACSHA256的方法
  5. Ubuntu20.04中VScode不能输入中文解决
  6. 从容度日的九种方法!
  7. 电路计算机为什么要规定方向,为什么要在电路图规定电流的参考方向,实际方向有什么关系与...
  8. VRTK案例011~020
  9. 机器学习算法之贝叶斯算法 2、案例一:鸢尾花数据分类
  10. Werkzeug 教程