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的错误界面;的更多相关文章

  1. iOS webview加载时序和缓存问题总结

    iOS webView的加载时序 UIWebView加载顺序: - (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSU ...

  2. 指向“”的 script 加载失败

    今天遇到了一个非常奇怪的问题:在某个同时的电脑上,所有浏览器无法打开某个页面,F12查看控制台,发现有一个黄色的 指向“xxxx.js”的 <script> 加载失败 的提示.该外部js文 ...

  3. 伪元素黑魔法:一个替代onerror解决图片加载失败的方案

    问题的引出是这样的,在一个项目中有大量的页面主体是table做数据展示,所以就封装了一个table的组件,提供动态渲染的方案.有个问题是数据类型中有图片,对于图片的加载失败我们需要做容错.一般我们的思 ...

  4. WebView加载页面的两种方式——网络页面和本地页面

    WebView加载页面的两种方式 一.加载网络页面 加载网络页面,是最简单的一种方式,只需要传入http的URL就可以,实现WebView加载网络页面 代码如下图: 二.加载本地页面 1.加载asse ...

  5. IOS空数据页面,网络加载失败以及重新登陆View的封装(不需要继承)

    一.问题 对于B2C和B2B项目的开发者,可能会有一个订单列表为空,或者其他收藏页面为空,用户token失效,判断用户要重新登陆,以及后台服务错误等提示.本篇课文,看完大约10分钟. 原本自己不想写空 ...

  6. 在CentOS7中配置网络时常见的LSB加载失败问题

    前几天,为了给OpenNebula扩展新的主机节点,对CentOS7的网络进行了配置.本以为网络配置只需要简单修改ifcfg-eth0即可,但是在重启网络服务时却遇到了一个LSB加载失败的问题(Fai ...

  7. Android--------WebView+H5开发仿美团 预加载,加载失败和重新加载

    Android嵌入式开发已经占大多数了,很多界面都是以网页的形式展示,WebView可以使得网页轻松的内嵌到app里,还可以直接跟js相互调用. 本博客主要是模仿美团的旅游出行模块的预加载,网页加载失 ...

  8. Android WebView加载本地html并实现Java与JS交互

    最近做的一个项目中,用到自定义地图,将自定义地图转换成html页面,现在需要做的是如何将本地的html加载到android中,并可以实现交互. 相关讲解: 其实webview加载资源的速度并不慢,但是 ...

  9. 转:Android Webview 加载外部html时选择加载本地的js,css等资源文件

    原文地址:http://m.blog.csdn.net/blog/qduningning/43196819 在使用WebView加载网页的时候,有一些固定的资源文件如js的jquery包,css,图片 ...

随机推荐

  1. Scrapy 设置请求头

    爬虫的过程有些网站设置反盗链,需要我们在请求头中添加下,修改settings.py文件中添加 DEFAULT_REQUEST_HEADERS = { 'Accept': 'text/html,appl ...

  2. JavaScript 继承总结

    http://blog.csdn.net/yincheng01/article/details/6841953 Metro C++ http://www.cnblogs.com/michaelxu/a ...

  3. 深入理解ASP.NET MVC(3)

    系列目录 URL是如何通过路由表生成的(outbound) 通常我们被推荐在view设计时使用Html.ActionLink(…)产生链接,这样做的优势就是,url可以根据路由表生成.路由机制的另一个 ...

  4. HDP对应的各组件的版本信息

    截至目前最新的HDP版本为2.6: https://zh.hortonworks.com/products/data-platforms/hdp/ 如果版本更新,可采用以下步骤: 首先访问horton ...

  5. 阅读<Video Test Pattern Generator v7.0>笔记

    阅读<Video Test Pattern Generator v7.0>笔记 1.数据宽度的问题 TotalDataWidth的计算公式: 疑问:为什么TotalDataWidth后面需 ...

  6. 自定义抛出throw 对象练习

    package ltb6w; import java.util.*; public class Bank { private String select; private String select2 ...

  7. linux上mongodb的安装与卸载

    安装 1.下载安装包 wget http://fastdl.mongodb.org/linux/mongodb-linux-i686-1.8.2.tgz 下载完成后解压缩压缩包 tar zxf mon ...

  8. Flask--四种请求钩子函数

    请求钩子函数:请求前,请求后需要做的处理 @app.before_first_request-在第一次请求之前执行 @app.before_request-在每一次请求之前执行 @app.after_ ...

  9. git撤销本地所有未提交的更改

    1. git clean -df2. git reset --hard第一个命令只删除所有untracked的文件,如果文件已经被tracked, 修改过的文件不会被回退.而第二个命令把tracked ...

  10. Rstdio 中print中文乱码

    在Consol中输入 Sys.setlocale("LC_ALL","Chinese") 即可