WebView加载失败或网络异常时,替换WebView的错误界面;
WebView在加载失败时会显示一个失败原因的界面,各个手机显示的界面还都不一样,部分手机还会把Url显示出来;我们要做的就是统一加载失败的界面;
大概思路:在WebView这个控件上面再覆盖一个View,监听WebView加载失败时把这个View显示出来,这样用户就看不到原来的WebView的失败界面了。
监听WebView开始加载、加载完成、加载失败;
在开始加载时,把自定义失败的View隐藏,加载失败时把这个View显示出来;
mWebView.setWebViewClient(new WebViewClient() {
//在开始加载网页时会回调
@Override
public void onPageStarted(WebView webView, String s, Bitmap bitmap) {
super.onPageStarted(webView, s, bitmap);
ivError.setVisibility(View.INVISIBLE);
mWebView.setVisibility(View.VISIBLE);
}
//加载错误的时候会回调
@Override
public void onReceivedError(WebView webView, int i, String s, String s1) {
super.onReceivedError(webView, i, s, s1);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
return;
}
ivError.setVisibility(View.VISIBLE);
mWebView.setVisibility(View.INVISIBLE);
}
//加载错误的时候会回调
@Override
public void onReceivedError(WebView webView, WebResourceRequest webResourceRequest, WebResourceError webResourceError) {
super.onReceivedError(webView, webResourceRequest, webResourceError);
if (webResourceRequest.isForMainFrame()) {
ivError.setVisibility(View.VISIBLE);
mWebView.setVisibility(View.INVISIBLE);
}
}
//加载完成的时候会回调
@Override
public void onPageFinished(WebView webView, String s) {
}
});
点击加载失败界面,重新载入这个网页;
ivError.setOnClickListener(v -> mWebView.reload());
刷新后WebView退出不了,重定向的问题解决;
在setWebViewClient这个方法中添加:
@Override
public boolean shouldOverrideUrlLoading(WebView webView, String url) {
WebView.HitTestResult hitTestResult = webView.getHitTestResult();
//hitTestResult==null解决重定向问题(刷新后不能退出的bug)
if (!TextUtils.isEmpty(url) && hitTestResult == null) {
return true;
}
return super.shouldOverrideUrlLoading(webView, url);
}
看一下XML布局:
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<com.cc.webview.X5WebView
android:id="@+id/mWebView"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<ImageView
android:id="@+id/ivError"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:src="@mipmap/web_loaderror"
android:scaleType="centerCrop"
android:visibility="invisible"
/>
</FrameLayout>
大概就是这样,WebView刷新后不能退出这个问题重写一下“shouldOverrideUrlLoading”这个方法就行了;
WebView加载失败或网络异常时,替换WebView的错误界面;的更多相关文章
- iOS webview加载时序和缓存问题总结
iOS webView的加载时序 UIWebView加载顺序: - (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSU ...
- 指向“”的 script 加载失败
今天遇到了一个非常奇怪的问题:在某个同时的电脑上,所有浏览器无法打开某个页面,F12查看控制台,发现有一个黄色的 指向“xxxx.js”的 <script> 加载失败 的提示.该外部js文 ...
- 伪元素黑魔法:一个替代onerror解决图片加载失败的方案
问题的引出是这样的,在一个项目中有大量的页面主体是table做数据展示,所以就封装了一个table的组件,提供动态渲染的方案.有个问题是数据类型中有图片,对于图片的加载失败我们需要做容错.一般我们的思 ...
- WebView加载页面的两种方式——网络页面和本地页面
WebView加载页面的两种方式 一.加载网络页面 加载网络页面,是最简单的一种方式,只需要传入http的URL就可以,实现WebView加载网络页面 代码如下图: 二.加载本地页面 1.加载asse ...
- IOS空数据页面,网络加载失败以及重新登陆View的封装(不需要继承)
一.问题 对于B2C和B2B项目的开发者,可能会有一个订单列表为空,或者其他收藏页面为空,用户token失效,判断用户要重新登陆,以及后台服务错误等提示.本篇课文,看完大约10分钟. 原本自己不想写空 ...
- 在CentOS7中配置网络时常见的LSB加载失败问题
前几天,为了给OpenNebula扩展新的主机节点,对CentOS7的网络进行了配置.本以为网络配置只需要简单修改ifcfg-eth0即可,但是在重启网络服务时却遇到了一个LSB加载失败的问题(Fai ...
- Android--------WebView+H5开发仿美团 预加载,加载失败和重新加载
Android嵌入式开发已经占大多数了,很多界面都是以网页的形式展示,WebView可以使得网页轻松的内嵌到app里,还可以直接跟js相互调用. 本博客主要是模仿美团的旅游出行模块的预加载,网页加载失 ...
- Android WebView加载本地html并实现Java与JS交互
最近做的一个项目中,用到自定义地图,将自定义地图转换成html页面,现在需要做的是如何将本地的html加载到android中,并可以实现交互. 相关讲解: 其实webview加载资源的速度并不慢,但是 ...
- 转:Android Webview 加载外部html时选择加载本地的js,css等资源文件
原文地址:http://m.blog.csdn.net/blog/qduningning/43196819 在使用WebView加载网页的时候,有一些固定的资源文件如js的jquery包,css,图片 ...
随机推荐
- JavaScript 隐式类型转换之:加号+
加号+,有些情况下,它是算术加号,有些情况下,是字符串连接符号 如果字符串和数字相加,JavaScript会自动把数字转换成字符,不管数字在前还是字符串在前 "2" + 3; // ...
- 1、Nginx集群tomcat
一.准备工作 下载nginx,http://nginx.org/,本文采用nginx-1.8.0,下载之后直接解压,免安装 下载tomcat,以配置3台tomcat服务器做负载均衡为例 二.修改tom ...
- petalinux--执行子进程“oe-gnome-terminal-phonehome”失败(没有那个文件或目录)(转)
简介 使用petalinux配置kernel时候提示 “Failed to execute child process “oe-gnome-terminal-phonehome” (No such f ...
- 最全Pycharm教程(1)——定制外观
http://blog.csdn.net/u013088062/article/details/50100121
- Github使用说明 --整理者米米
打开百度搜索Git官网下载对应的windows版本 傻瓜式默认安装,点击完成 PS:安装的过程比较慢 安装完成后打开命令行窗口(cmd) 查看版本号------git --version 安装成功 ...
- Hadoop YARN上运行MapReduce程序
(1)配置集群 (a)配置hadoop-2.7.2/etc/hadoop/yarn-env.sh 配置一下JAVA_HOME export JAVA_HOME=/home/hadoop/bigdata ...
- 字符串CRC校验
字符串CRC校验 <pre name="code" class="python"><span style="font-family: ...
- MySQL行级锁测试
http://blog.csdn.net/bigtree_3721/article/details/77417518 http://blog.csdn.net/zengxuewen2045/artic ...
- MySQL5.7 GTID 浅析
https://yq.aliyun.com/articles/68441 摘要: # GTID 简介 GTID (global transaction identifier)在MySQL5.6时引入, ...
- DEVC++ C++ Builder6.0
Devc++安装后无法正常编译程序 出现错误,不知道是什么,可能是不兼容的原因 然后就是一直编译出错,程序是最简单的helloworld程序. 之后选择安装C++ Builder 6.0