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. React Native 学习资料

    React Native 学习资料 学习资料 网址 React Native中文网 https://reactnative.cn/

  2. arttemplate记录

    1,传到前端显示数据,最好用一个包装类,否则不知道怎么拿值 这样是忽略类名,直接从data属性入手,然后用点操作符 如果data是个list,可以用这个形式

  3. linux shell获取键盘输入

    linux shell从键盘获取输入 代码1: #!/bin/bash #提示“Input your choice:”,把用户的输入保存入变量choice_user中read -p "Inp ...

  4. ElasticSearch:Lucene和ElasticSearch

    Lucene的概念: 关于索引 索引(index)和搜索(搜索),在lucene以及es里面索引是一个动作,即插入动作,包括创建索引以及为索引添加文档:所有则是针对索引(添加)的文档按照评分规则进行查 ...

  5. java-网页404(个例)

    tomcat正常启动网址404问题 个例情况: 1.选择第二个 2.web.xml配置不对(是因为缺少相应jar包和配置错误,根据控制器显示的错误一步步解决错误,最后OK) 3.构建路径中有错误(更换 ...

  6. [转] openwrt关闭调试串口

    转自: http://wiki.wrtnode.com/index.php?title=Release_UART/zh-cn 由于mt7620n只有一个UART lite接口,在原生的OpenWrt中 ...

  7. linux lvm create and manager

    http://blog.51cto.com/dreamfire/1084729 https://www.cnblogs.com/xiaoluo501395377/archive/2013/05/24/ ...

  8. 各种类型的Json格式化

    using System; using System.Collections.Generic; using System.Text; using System.Data; using System.R ...

  9. msp430学习笔记-ADC12

    本文引用:http://bbs.ednchina.com/BLOG_ARTICLE_3013748.HTM MSP430单片机的ADC12模块是一个12位精度的A/D转换模块,它具有高速度,通用性等特 ...

  10. Fabric Engine2.0的自定义节点功能

    Fabric Engine是一个多用途的引擎,针对maya等软件写节点写功能很方便.尤其是canvas节点编辑面板,提供了大量现有的功能供用户调用,当然这些节点功能都是可被用户编辑修改的,除此之外还提 ...