我们用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

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">

android:id="@+id/main_webview"

android:layout_width="match_parent"

android:layout_height="match_parent">

2.activity_error.xml

android:orientation="vertical"

android:layout_width="match_parent"

android:layout_height="match_parent">

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" >

android:layout_width="match_parent"

android:layout_height="match_parent"

android:gravity="center"

android:orientation="vertical"

>

android:layout_width="70dp"

android:layout_height="70dp"

android:src="@drawable/wifi"

android:id="@+id/imageView2" />

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:textSize="18dp"

android:text="数据获取失败"

>

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:textSize="15dp"

android:text="请检查网络后,点击重新加载"

/>

以上所述是小编给大家介绍的Android中替换WebView加载网页失败时的页面,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

android动态设置错误页面,Android中替换WebView加载网页失败时的页面相关推荐

  1. Android中获取WebView加载的html中console.log输出的内容

    场景 Android中使用WebView加载本地html并支持运行JS代码和支持缩放: Android中使用WebView加载本地html并支持运行JS代码和支持缩放_BADAO_LIUMANG_QI ...

  2. android WebView加载网页白屏问题优化处理

    android WebView加载网页白屏问题优化处理 问题描述: 使用webview加载Web界面时,会出现界面白屏的情况.http下通常问题不大,通常https白屏的可能性很大,而且通常没有任何报 ...

  3. Webview加载网页时出现NET::ERR_CACHE_MISS的错误

    当使用webview加载网页时我们会遇到网页加载出错,出现NET::ERR_CACHE_MISS的错误,解决方法只需要在你工程的AndroidManifest.xml文件中加入联网的权限 <us ...

  4. android程序中关于webview加载html文件

    这两天用webview加载html时遇到很多问题也学到了不少,仅在这里记载以供以后参考,哪里不完善的还望有心人多加补充. (这里只介绍webview.loadUrl()) 思路:拿到网页url,然后把 ...

  5. Android使用WebView加载网页

    在AndroidManifest.xml设置访问网络权限: <span style="font-size:24px;"><span style="fon ...

  6. Android WebView加载网页,图片等元素宽度大小不兼容手机屏幕的宽度

    无论是Android手机还是iOS手机,使用WebView加载一些没有专门为手机屏幕做适配的网页的时候,就会出现网页中的图片等标签元素的宽度大小和手机屏幕的宽度不一致的情况,如下图 之所以会出现上面的 ...

  7. Android使用WebView加载网页及数据

    今天主要介绍一下Android的一个原生组件-WebView. 在Api中关于这个类的介绍大致就是这是一个可以显示网页的视图,如: webView.loadUrl("http://www.b ...

  8. Matlab停在载入界面,试图在Matlab用户界面中实现保存/加载对象功能时遇到了困难...

    我尝试在Matlab(R2009A)用户界面中实现保存/加载函数.我的对象实现了一个布局函数,它为对象生成一个用户界面.我正在尝试实现保存/加载按钮的回调."保存"按钮起作用,并将 ...

  9. android动态设置错误页面,Android缺省页的正确打开方式(优雅的处理loading、error、empty...

    Android缺省页的正确打开方式(优雅的处理loading.error.empty Android缺省页的正确打开方式(优雅的处理loading.error.empty各种状态缺省) MultiSt ...

最新文章

  1. 科研项目:机器学习在场景中的应用!
  2. 【Python自学】六个上手超强的学习工具,你值得有
  3. eplan接触器主触点怎么成一组_实物讲解接触器自锁电路的接线方法
  4. 如何用CSS制作横向菜单?
  5. Emscripten 单词_(第30期:英语教师备课资料) 英文标识记单词 有趣有用又高效...
  6. sql server 2005 express附加数据库出错解决方法——添加数据库用户
  7. Lua的upvalue和闭包
  8. Some Essential JavaScript Questions And Answers(5)
  9. 算法-排序-k排序(算法导论第三版第八章思考题8-5)
  10. 电子设计速成_Web设计速成课程:从一个非设计者到另一个
  11. java有哪些类_Java中常用的类有哪些?
  12. javabean更新到mysql_javabean连mysql 数据库更新问题
  13. 运用Java对微信公众平台二次开发技术——开发者模式接入
  14. 【BZOJ】2599: [IOI2011]Race 点分治
  15. 利用jquery写的从后台获取json数据以表格显示,并带翻页功能.里面包含模式窗口等功能...
  16. 大数据如何推动医疗行业的发展
  17. 360度测试:KAFKA会丢数据么?其高可用是否满足需求?
  18. 并发编程学习之线程8锁
  19. LintCode炼码刷题实操平台
  20. UCGUI动态内存分析

热门文章

  1. R语言dataframe合并函数merge实战
  2. 查理芒格+终身学习+你的认知就是你的财富的边界
  3. GAN(Generative Adversarial Network,GAN)模型之:InfoGAN、WGAN、DCGAN模型
  4. 自然语言处理NLP、自然语言理解NLU、自然语言生成NLG、任务家族
  5. 网站采用自建服务器的优点,企业自建网页的方法是怎样的,自建网站有哪些优点呢?...
  6. Android Studio下的目录结构
  7. 数字图像处理- 3.4 空间滤波 and 3.5 平滑空间滤波器
  8. mvc登录实例 mysql_spring mvc + mybatis + mysql 调整的一个简单的登录例子
  9. linux中system清屏命令,Linux磁盘管理命令
  10. java中飞飞检查异常_Java复习6异常处理