android webview 自定义404错误页面!

jopen 12年前

自定义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                             @Override  16                             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         };

来自:http://www.cnblogs.com/winxiang/archive/2012/10/25/2738320.html