我们用webView去请求一个网页链接的时候,如果请求网页失败或无网络的情况下,它会返回给我们这样一个页面,如下图所示:

上面这个页面就是系统自带的页面,你觉得是不是很丑?反正小编本人觉得非常丑,很难看,于是乎小编就在想能不能自定义一个页面,当数据请求失败时让系统来加载我们自定义好的页面?上网查了很多资料,都没有关于这个问题的解决方法(反正我是没有找到),经过小编的不断琢磨,今天终于实现了这个功能。以下就是本人自定义实现的数据加载失败时的页面:
这样看起来是不是觉得很高大尚。这和我们真正拿到数据接口做出来的效果完全一样。对于用户来说这样的体验也是很完美的。
**全部代码:
一、主代码:**
MainActivity.Java
package com.example.webview;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
public class MainActivity extends AppCompatActivity {
private WebView webview;
private WebSettings mWebSettings;
private View mErrorView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
webview = (WebView) findViewById(R.id.main_webview);
setUpView();
}
private void setUpView() {
//加载需要显示的网页
webview.loadUrl("http://www.baidu.com/");
//设置WebView属性,能够执行Javascript脚本
webview.getSettings().setJavaScriptEnabled(true);
mWebSettings = webview.getSettings();
mWebSettings.setJavaScriptEnabled(true); //允许加载javascript
mWebSettings.setSupportZoom(true); //允许缩放
mWebSettings.setBuiltInZoomControls(true); //原网页基础上缩放
mWebSettings.setUseWideViewPort(true); //任意比例缩放
webview.setWebViewClient(webClient); //设置Web视图
}
/***
* 设置Web视图的方法
*/
WebViewClient webClient = new WebViewClient(){//处理网页加载失败时
public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
showErrorPage();//显示错误页面
};
};
boolean mIsErrorPage;
protected void showErrorPage() {
LinearLayout webParentView = (LinearLayout)webview.getParent();
initErrorPage();//初始化自定义页面
while (webParentView.getChildCount() > 1) {
webParentView.removeViewAt(0);
}
@SuppressWarnings("deprecation")
LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(ViewPager.LayoutParams.FILL_PARENT, ViewPager.LayoutParams.FILL_PARENT);
webParentView.addView(mErrorView, 0, lp);
mIsErrorPage = true;
}
/****
* 把系统自身请求失败时的网页隐藏
*/
protected void hideErrorPage() {
LinearLayout webParentView = (LinearLayout)webview.getParent();
mIsErrorPage = false;
while (webParentView.getChildCount() > 1) {
webParentView.removeViewAt(0);
}
}
/***
* 显示加载失败时自定义的网页
*/
protected void initErrorPage() {
if (mErrorView == null) {
mErrorView = View.inflate(this, R.layout.activity_error, null);
RelativeLayout layout = (RelativeLayout)mErrorView.findViewById(R.id.online_error_btn_retry);
layout.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
webview.reload();
}
});
mErrorView.setOnClickListener(null);
}
}
}
二、XML布局代码:
1.activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="com.example.webview.MainActivity">
<WebView
android:id="@+id/main_webview"
android:layout_width="match_parent"
android:layout_height="match_parent">
</WebView>
</LinearLayout>
2.activity_error.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<RelativeLayout
android:id="@+id/online_error_btn_retry"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#E6E6E6"
android:clickable="true"
android:gravity="center" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:orientation="vertical"
>
<ImageView
android:layout_width="70dp"
android:layout_height="70dp"
android:src="@drawable/wifi"
android:id="@+id/imageView2" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="18dp"
android:text="数据获取失败"
></TextView>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="15dp"
android:text="请检查网络后,点击重新加载"
/>
</LinearLayout>
</RelativeLayout>
</LinearLayout>
以上所述是小编给大家介绍的Android中替换WebView加载网页失败时的页面,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!
# webview
# 加载失败页面
# Android WebView打开网页一片空白的解决方法
# Android开发笔记之如何正确获取WebView的网页Title
# Android WebView实现网页滚动截图
# 详解android 用webview加载网页(https和http)
# Android开发中使用WebView控件浏览网页的方法详解
# Android编程实现webview将网页打包成apk的方法
# Android中Webview打开网页的同时发送HTTP头信息方法
# Android webView如何输出自定义网页
# 加载
# 自定义
# 小编
# 我是
# 就在
# 在此
# 基础上
# 都没
# 给我们
# 这个问题
# 给大家
# 这样一个
# 所示
# 你觉得
# 它会
# 没有找到
# 解决方法
# 所述
# 这和
# 给我留言
相关文章:
如何在搬瓦工VPS快速搭建网站?
C++用Dijkstra(迪杰斯特拉)算法求最短路径
如何通过虚拟机搭建网站?详细步骤解析
SAX解析器是什么,它与DOM在处理大型XML文件时有何不同?
香港网站服务器数量如何影响SEO优化效果?
网站图片在线制作软件,怎么在图片上做链接?
c++怎么编写动态链接库dll_c++ __declspec(dllexport)导出与调用【方法】
广州建站公司哪家好?十大优质服务商推荐
如何通过二级域名建站提升品牌影响力?
网站好制作吗知乎,网站开发好学吗?有什么技巧?
如何选择网络建站服务器?高效建站必看指南
建站为何优先选择香港服务器?
制作旅游网站html,怎样注册旅游网站?
常州企业网站制作公司,全国继续教育网怎么登录?
高防服务器如何保障网站安全无虞?
零基础网站服务器架设实战:轻量应用与域名解析配置指南
公司网站制作价格怎么算,公司办个官网需要多少钱?
如何用PHP快速搭建CMS系统?
高防服务器租用如何选择配置与防御等级?
nginx修改上传文件大小限制的方法
如何选择高效响应式自助建站源码系统?
如何自定义建站之星网站的导航菜单样式?
网站制作哪家好,cc、.co、.cm哪个域名更适合做网站?
一键制作网站软件下载安装,一键自动采集网页文档制作步骤?
建站之星ASP如何实现CMS高效搭建与安全管理?
广平建站公司哪家专业可靠?如何选择?
网站制作的软件有哪些,制作微信公众号除了秀米还有哪些比较好用的平台?
微课制作网站有哪些,微课网怎么进?
长沙企业网站制作哪家好,长沙水业集团官方网站?
常州自助建站费用包含哪些项目?
制作表格网站有哪些,线上表格怎么弄?
如何破解联通资金短缺导致的基站建设难题?
官网自助建站系统:SEO优化+多语言支持,快速搭建专业网站
已有域名建站全流程解析:网站搭建步骤与建站工具选择
北京网站制作网页,网站升级改版需要多久?
如何做网站制作流程,*游戏网站怎么搭建?
建站主机服务器选购指南:轻量应用与VPS配置解析
建站之星如何通过成品分离优化网站效率?
外贸公司网站制作,外贸网站建设一般有哪些步骤?
建站之星后台密码遗忘?如何快速找回?
建站之星如何助力企业快速打造五合一网站?
开心动漫网站制作软件下载,十分开心动画为何停播?
红河网站制作公司,红河事业单位身份证如何上传?
如何撰写建站申请书?关键要点有哪些?
湖南网站制作公司,湖南上善若水科技有限公司做什么的?
C++ static_cast和dynamic_cast区别_C++静态转换与动态类型安全转换
沈阳制作网站公司排名,沈阳装饰协会官方网站?
如何快速配置高效服务器建站软件?
建站之星如何快速生成多端适配网站?
手机网站制作平台,手机靓号代理商怎么制作属于自己的手机靓号网站?
*请认真填写需求信息,我们会在24小时内与您取得联系。