自定义404页面。android的webview 控件可以加载网页,webview有两个方法:webView.setWebChromeClient和webView.setWebViewClient。

WebChromeClient主要处理解析,渲染网页等浏览器做的事情,辅助WebView处理Javascript的对话框,网站图标,网站title,加载进度:
  onCloseWindow(关闭WebView)
  onCreateWindow()
  onJsAlert (WebView上alert是弹不出来东西的,需要定制你的WebChromeClient处理弹出)
  onJsPrompt
  onJsConfirm
  onProgressChanged
  onReceivedIcon
  onReceivedTitle

比如可以添加进度条,使得界面更友好。

WebViewClient是帮助WebView处理各种通知、请求事件的,具体来说包括:

  onLoadResource
  onPageStart
  onPageFinish
  onReceiveError//这个就是我们想要的方法
  onReceivedHttpAuthRequest

那么我们要加载自定义的404界面就要两个并用了。

代码如下:

 1         webView = (WebView) findViewById(R.id.webv);//获取控件 2         webView.getSettings().setJavaScriptEnabled(true); //设置js权限,比如js弹出窗,你懂得 3         webView.getSettings().setSupportMultipleWindows(true); 4          5         webView.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY);  6          7         webView.setWebChromeClient(new MyWebChromeClient() 8             {          9                 public void onProgressChanged(WebView view, int progress)//设置 加载进程10                 {11                     activity.setTitle("正在加载...Loading...");12                     activity.setProgress(progress * 100);13                     if(progress >= 100){14                         new Thread(new Runnable() {15                             @Override16                             public void run() {17                                 Message msg=handler.obtainMessage();//发送通知,加入线程18                                 msg.what=2;//加载完成19                                 handler.sendMessage(msg);//通知发送!20                             }              21                         }).start();  22                         activity.setTitle(R.string.app_name);23                     }24                 }25             }26         );27         28         webView.setWebViewClient(new WebViewClient() {29             public void onReceivedError(WebView view, int errorCode, String description, String failingUrl)    30             { 31                 view.stopLoading();32                 view.clearView();33                 Message msg=handler.obtainMessage();//发送通知,加入线程34                 msg.what=1;//通知加载自定义404页面35                 handler.sendMessage(msg);//通知发送!36             }37             public boolean shouldOverrideUrlLoading(WebView view, String url)  38             {39                 view.loadUrl(url);40                 return true;41                 }42             });43         webView.addJavascriptInterface(this, "javatojs");//将本activity绑定到java_js这个js当中去44         webView.loadUrl(URL);45         checkUPPay();//检测银联支付控件是否已添加46     }47     /**48      * handler处理消息机制49      */50         protected Handler handler = new Handler(){51             public void handleMessage(Message message){52                 switch (message.what) {53                 case 0:54                     myDialog.show();55                     break;56                 case 1:57                     webView.loadUrl(URL404);58                     break;59                 case 2:60                     myDialog.dismiss();61                     break;62                 }63             }64         };

说明:虽说这两个方法都是系统内置方法,但是连用起来还是会出现短暂的跳转,跳转的一瞬间会看到原有的404错误页面。我了解过其他文章的分析,部分文章认为这是因为webview加载页面是通过两个线程进行的,所以当我们收到错误消息的时候另外一个线程可能就将原先的页面显示出来了。所以会有一点“闪”。

在使用这个方法之前我也想过其他的加载自定义界面,比如在页面加载到大于99%的时候,我检测webview的title,如果是null或“未找到页面(不同的手机可能提示的不一样)”就跳转到自定义的错误界面,同样也会出现短暂的闪出原404界面。

当我找到文章刚开始的方法之后果断把这个方法舍去了,因为不同手机的提示是不一样的,而且有时候tomcat或其他服务器会返回其他的错误信息,这个我也要意义检测,不光慢,也不科学。

本人经验有限,技术拙漏,薄文仅供参考。欢迎批评指正

更多相关文章

  1. Android手机定位未开启,跳转到GPS开启页面
  2. Android关机方法
  3. Android Studio中获取MD5、SHA1、SHA256的方法
  4. Android 程序执行Linux命令的解决方法及注意事项
  5. android使用SmartRefreshLayout库实现下拉刷新和上拉加载
  6. Android支持java8的设置方法
  7. Android webkit image的加载过程解析(三)
  8. Android Studio的Gradle错误解决方法
  9. Android 主动获取电量的方法

随机推荐

  1. android之NDK(jni)开发笔记1——运行第一个
  2. 阿里路由框架ARouter简介
  3. Android 2020年最新保活方案 保活90% 已
  4. android实现ios形式的字体,实现各种自定义
  5. Android学习建议
  6. [Android Studio] Android Studio如何提
  7. 论“Android”在未来十年的发展
  8. Android React Native的使用细节问题
  9. Android 驱动之旅 第四章:在Android 系统
  10. Android(安卓)音视频深入 四 Android原生