一.webView 的介绍和用途

.webView 介绍和用途

1.webView的介绍:在Android手机中内置了一款高性能webkit内核浏览器,在SDK中封装成名为WebView的组件,总之浏览器可以干的事,你都可以通过webview来实现。

二.webView 的一些基本用法

通过上面的介绍你可能对webview的一些常用的功能的用法有点疑惑,下面我们讲解一些在webview中的常用的用法。

1.加载一个网络的url

[java]  view plain  copy
  1. mWebView = (WebView) this.findViewById(R.id.mWebview);  
  2. mWebView.loadUrl(url);  

2.加载一个本地存放在assets文件下的html文件

[java]  view plain  copy
  1. mWebView = (WebView) this.findViewById(R.id.mWebview);  
  2. webView.loadUrl("file:///android_asset/XX.html")  

 
    
   在这里我要特别说明一下: 
    
   

当你在本地html文件中用到图片,js等的时候就要注意加载的方式,我在刚刚开始的时候也是通过上面的方法直接加载,结果都是失败的,在这里首先我们要在本地的html文件中配置img,js的方式要如:的格式,然后将整个html文件的内容获取,最后调用

[java]  view plain  copy
  1. wv_liebao.loadDataWithBaseURL("file:///android_asset/my.html",Str_html, "text/html""utf-8"null);  

其中第二个参数就是整个html的的String

3.WebviewWebSetting

1.webview允许加载js(详细用法后面介绍)

[java]  view plain  copy
  1. mWebView.getSettings().setJavaScriptEnabled(true);  

2.webview 允许调用本地文件

[java]  view plain  copy
  1. mWebView.getSettings().setAllowFileAccess(true);  

3.webview 自适应手机屏幕大小

[java]  view plain  copy
  1. wv_liebao.getSettings().setUseWideViewPort(true);  
  2. wv_liebao.getSettings().setLoadWithOverviewMode(true);  

三.webView  的一些高级特性和用法

1.使用自己的 WebViewClient

当我们要使用已经load进来的url的页面的一些特性的使用,一般会新建我们的WebViewClient,然后去调用里面的一些方法。

下面介绍一下其中比较重要和常见的方法

1.让我们的webView一直load一些url,屏蔽系统的浏览器

[java]  view plain  copy
  1. public boolean shouldOverrideUrlLoading(WebView view, String url) {  
  2.         // TODO Auto-generated method stub  
  3.         mWebview.loadUrl(url);  
  4.         return true;  
  5.     }  

2,当webView在加载网页的开始和结束时的回调方法

[java]  view plain  copy
  1. @Override  
  2.         public void onPageStarted(WebView view, String url, Bitmap favicon) {  
  3.             // TODO Auto-generated method stub  
  4.             super.onPageStarted(view, url, favicon);  
  5.         }  
  6.   
  7.         @Override  
  8.         public void onPageFinished(WebView view, String url) {  
  9.             // TODO Auto-generated method stub  
  10.             super.onPageFinished(view, url);  
  11.         }  

3.当我们load网页是由于一些网络或服务器的原因没有load进来,我们可以用自己的网页来替代错误网页

[java]  view plain  copy
  1. @Override  
  2.         public void onReceivedError(WebView view, int errorCode,  
  3.                 String description, String failingUrl) {  
  4.             // TODO Auto-generated method stub  
  5.             Message message = Message.obtain();  
  6.             message.what = Myconstants.ERROR_PAGE;  
  7.             handler.sendMessage(message);  
  8.         }  

2.使用我们自己的WebChromeClient来处理那些网页上比较复杂的js, Javascript的对话框、网站图标、网站title、加载进度等。

[java]  view plain  copy
  1. @Override  
  2.         public void onReceivedTitle(WebView view, String title) {  
  3.             // TODO Auto-generated method stub  
  4.             super.onReceivedTitle(view, title);  
  5.         }  
  6.   
  7.         @Override  
  8.         public boolean onJsAlert(WebView view, String url, String message,  
  9.                 JsResult result) {  
  10.             // TODO Auto-generated method stub  
  11.             return super.onJsAlert(view, url, message, result);  
  12.         }  
  13.   
  14.         @Override  
  15.         public boolean onJsConfirm(WebView view, String url, String message,  
  16.                 JsResult result) {  
  17.             // TODO Auto-generated method stub  
  18.             return super.onJsConfirm(view, url, message, result);  
  19.         }  

3.使用webView的一些高级特性来开发.

1.下载文件

在开发webView的时候我们可能会要下载一些文件,如果不作处理,那么就可能会直接调用系统的浏览器来进行下载,那该如何使用呢?

我们可以实现webViewDownloadListener接口

[java]  view plain  copy
  1. @Override  
  2.         public void onDownloadStart(String url, String userAgent,  
  3.                 String contentDisposition, String mimetype, long contentLength) {  
  4.             // TODO Auto-generated method stub  
  5.         }  

可以获取一个下载文件的url,然后我么自己再进行文件的下载

2.通过webView上传文件

我们在webVIew中处理网页上如中的上传文件的标签,我们可以在WebChromeClient中重写打开文件的方法

[java]  view plain  copy
  1. // For Android3.0+  
  2.         public void openFileChooser(ValueCallback uploadMsg,  
  3.                 String acceptType) {  
  4.             if (mUploadMessage != null)  
  5.                 return;  
  6.             mUploadMessage = uploadMsg;  
  7.             Intent innerIntent = new Intent(Intent.ACTION_GET_CONTENT);  
  8.             String IMAGE_UNSPECIFIED = "image/*";  
  9.             innerIntent.setType(IMAGE_UNSPECIFIED); // 查看类型  
  10.             Intent wrapperIntent = Intent.createChooser(innerIntent, null);  
  11.             startActivityForResult(wrapperIntent, Myconstants.REQ_CHOOSE);  
  12.     }  
  13.   
  14.         // For Android < 3.0  
  15.         public void openFileChooser(ValueCallback uploadMsg) {  
  16.             openFileChooser(uploadMsg, "");  
  17.         }  
  18.   
  19.         // For Android > 4.1.1  
  20.         public void openFileChooser(ValueCallback uploadMsg,  
  21.                 String acceptType, String capture) {  
  22.             openFileChooser(uploadMsg, acceptType);  
  23.         }  

然后再在onActivityResult中进行处理

[java]  view plain  copy
  1. @Override  
  2.     protected void onActivityResult(int requestCode, int resultCode,  
  3.             Intent intent) {  
  4.         super.onActivityResult(requestCode, resultCode, intent);  
  5.         if (null == mUploadMessage)  
  6.             return;  
  7.         Uri uri = null;  
  8.         if (requestCode == Myconstants.REQ_CHOOSE) {  
  9.             if (intent != null) {  
  10.                 uri = afterChosePic(intent);  
  11.             }  
  12.         }  
  13.         mUploadMessage.onReceiveValue(uri);  
  14.         mUploadMessage = null;  
  15.     }  

3长按webView保存网页上的图片等

首先我们可以重写webViewonlongclickListener,如下

[java]  view plain  copy
  1. wv_liebao.setOnLongClickListener(new OnLongClickListener() {  
  2.             @Override  
  3.             public boolean onLongClick(View v) {  
  4.                 // TODO Auto-generated method stub  
  5.                 HitTestResult hitTestResult = wv_liebao.getHitTestResult();  
  6.                 int type = hitTestResult.getType();  
  7.                 if (type == HitTestResult.IMAGE_TYPE  
  8.                         || type == HitTestResult.SRC_IMAGE_ANCHOR_TYPE) {  
  9.                     String imageUrl = hitTestResult.getExtra();  
  10.                     showSaveDialog(imageUrl);  
  11.                 }  
  12.                 return true;  
  13.             }  
  14.         });  
上面的代码中我保存的是图片,我们可以通过 HitTestResult 这个类来实现,具体实现参考上面的代码。

4.webView 的cookie处理.

通常我们在开发webView的过程中可能会用到cookie,那么我们该如何处理呢?首先在android中我们有一个cookie store,当我们打开一个链接的时候,如果我们想要保存cookie留着后面使用,可以先保存cookiestore中,然后再同步一下store库,那么以后我们在打开连接的时候,我们的webView会先访问以下cookieStore库,看有没有cookie,然后在打开连接。

[java]  view plain  copy
  1. CookieSyncManager.createInstance(this);  
  2.         cookieManager = CookieManager.getInstance();  
  3. cookieManager.setAcceptCookie(true);  
  4. cookieManager.getCookie(url);  
  5. cookieManager.setCookie(url, value);  
  6. CookieSyncManager.getInstance().sync();  
4.webView 实现网页 js 的交互

具体实现如下

[java]  view plain  copy
  1. mWebView.addJavascriptInterface(  
  2.     new Object() {   
  3.             public void clickOnAndroid(final int i) {   
  4.                 mHandler.post(new Runnable() {   
  5.                     public void run() {   
  6.                                 int j = i;  
  7.                                 j++;  
  8. Toast.makeText(Test.this"测试调用java" + String.valueOf(j), Toast.LENGTH_LONG).show();  
  9.                     }  
  10.                 });  
  11.             }   
  12.         }, "demo");  
  13.   
  14. 然后在html页面中,利用如下代码'b'>"window.demo.clickOnAndroid()">b.c
,即可实现调用记得两者的“demo”要保持一致  

注意:上面的调用js代码在4.2以上没有作用,需要在调用之前标注:

@Javascriptinterface

这一句话。。










你可能感兴趣的:(一.webView 的介绍和用途)