使用WebView时的一些坑(图片拼接、不显示、shouldOverrideUrlLoading正确用法)
来源:互联网 发布:js闭包坏处 编辑:程序博客网 时间:2024/05/01 12:35
开始学习WebView时感觉很简单,就是拿到控件后给他个URL就OK啦,但是在项目中真正用的时候,会有各种问题。
问题1:
如果URL的内容是一个个图片拼接的,会出现图片折叠的现象
原因:没有对WebView进行适配,只需要几行代码就OK
/***LayoutAlgorithm是一个枚举,用来控制html的布局,总共有三种类型:*NORMAL:正常显示,没有渲染变化。*SINGLE_COLUMN:把所有内容放到WebView组件等宽的一列中。这个是强制的,把网页都挤变形了*NARROW_COLUMNS:可能的话,使所有列的宽度不超过屏幕宽度。*/ webSettings.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.NORMAL); //设置webview推荐使用的窗口,设置为true webSettings.setUseWideViewPort(true); //设置webview加载的页面的模式,也设置为true。这方法可以让你的页面适应手机屏幕的分辨率,完整的显示在屏幕上,可以放大缩小。 webSettings.setLoadWithOverviewMode(true);
参考博客
问题2:
加载WebView时个别图片无法显示
参考博客
我设置了如下的属性:
webView.getSettings().setDomStorageEnabled(true);
知识补充:
1)若没有设置 WebViewClient 则在点击链接之后由系统处理该 url,通常是使用浏览器打开或弹出浏览器选择对话框。(如果想要自己处理URL需要重写方法shouldOverrideUrlLoading )
2)若设置WebViewClient 且该方法返回 true ,则说明由应用的代码处理该 url,WebView 不处理。
3)若设置 WebViewClient 且该方法返回 false,则说明由 WebView 处理该 url,即用 WebView 加载该 url。
再结合 shouldOverrideUrlLoading 方法源码就可以得出上面图片中的结论,其实我们没必要自定义 WebViewClient 并重写其 shouldOverrideUrlLoading 方法,因为 WebViewClient 源码中 shouldOverrideUrlLoading 方法已经返回 false,也就是说只要你设置了 WebViewClient 就可以实现在WebView 中加载新的链接而不去调用浏览器加载。
参考文档
例子:
如果加载的URL中返回的URL包括想要的内容就跳到商详页
webView.setWebViewClient(new WebViewClient() { @Override public void onReceivedError(WebView view, WebResourceRequest request, WebResourceError error) { // TODO 加载失败的处理 dismissProgress(); super.onReceivedError(view, request, error); } @Override public void onPageFinished(WebView view, String url) { dismissProgress(); super.onPageFinished(view, url); } @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { if (url.contains(PRODUCT_LINK)) { Uri uri = Uri.parse(url); long productId = Long.parseLong(uri.getQueryParameter("product_id")); Intent intent = new Intent(WebViewActivity.this, ProductDetailActivity.class); intent.putExtra(ConstantKeys.PRODUCT_ID, productId); startActivity(intent); return true; } return super.shouldOverrideUrlLoading(view, url); } });
WebViewClient 处理跳转URL(二次跳转)
1 0
- 使用WebView时的一些坑(图片拼接、不显示、shouldOverrideUrlLoading正确用法)
- Android博客挑错系列之二 WebView的shouldOverrideUrlLoading的正确用法
- WebView shouldOverrideUrlLoading 方法使用
- WebView shouldOverrideUrlLoading 不触发原因
- Android - webview拦截css,js,图片后加载本地外部存储的文件(shouldOverrideUrlLoading)
- webview不显示图片
- webview 不显示图片
- webview里面的图片不显示
- android WebView shouldOverrideUrlLoading 不执行问题
- 【WebView加载本地资源图片 字体等】一些不常用的用法集合
- 在WebView自身打开链接 -- 关于WebViewClient类shouldOverrideUrlLoading的错误用法
- XZ_iOS之使用webView加载后台返回的一串html代码,HTML中的图片不显示
- webview 2.3.x系统时shouldOverrideUrlLoading不起作用
- YII中CDetailView下使用CHtml image()显示图片的正确用法
- WebView的一些用法
- WebView的一些用法
- webView 加载路径 里面的图片不显示
- webView加载 https 的网页,不显示图片.md
- 凡人修真3D(2)神兵
- linux系统中安装ntopng的坎坷路
- js学习笔记:事件——事件流、事件处理程序、事件对象
- docker whenever部署时设置环境
- 导入时如何定制spring-boot依赖项的版本
- 使用WebView时的一些坑(图片拼接、不显示、shouldOverrideUrlLoading正确用法)
- Dijkstra(迪杰斯特拉)算法-js实现
- 用微笑面对一切令你烦恼的人或事,不久之后,你会发现令你微笑的人或事变得越来越多了。
- 便捷的数据同步机制,在同一类型数据库服务器上
- TCP和UDP的区别(转)
- python学习(10)高级特性
- Mondrian API
- iOS让进行模态的控制器依旧显示而不消失
- sql查询