Android WebView 加载网页

 在开发Android平台的互联网应用时,经常会使用到WebView,好处主要有两个,一是可以更改要展现的内容(包括样式),二是可以实现部分功能的跨平台,下面我介绍几种常用写法和区别,如下:

   1.加载html代码方式有loadData()和loadDataWithBaseURL():

       loadData()或loadDataWithBaseURL()加载一段HTML代码片段。loadUrl()的使用大家应该都没有什么问题,但是loadData()和loadDataWithBaseURL()在使用上的差异可能有些人还不太清楚。

首先,从方法的定义来看:

public void  loadData  (String data, String mimeType, String encoding) public void  loadDataWithBaseURL  (String baseUrl, String data, String mimeType, String encoding, String historyUrl)

loadDataWithBaseURL()比loadData()多两个参数,可以指定HTML代码片段中相关资源的相对根路径,也可以指定历史Url。两个方法的其余三个参数相同。

其次,两个方法加载的HTML代码片段有些不同,loadData()中的html data中不能包含’#’, ‘%’, ‘\’, ‘?’四中特殊字符,这就为我们内嵌css等制造了些许麻烦,因为css中经常用’#’, ‘%’等字符,需要如何处理呢?我们需要用UrlEncoder编码为%23, %25, %27, %3f 。

loadDataWithBaseURL代码例子如下写法:

[java][/java] view plaincopy

  1. StringBuilder data = new StringBuilder(“<html><body bgcolor=\”#F2F6F8\”>”);
  2.             int size = paperList.size();
  3.             for(int i = 0;i < size;i++){
  4.                 if(!StringUtils.isEmpty(paperList.get(i).getFilePath())){
  5.                     data.append(“<center>”).append(“<img src = \”file://”+paperList.get(i).getFilePath()+”\”>”).append(“</center><br>”);
  6.                 }
  7.                 data.append(“<center>”).append(“<font color=\”#000000\”>”+paperList.get(i).getContent()+”</font>”).append(“</center><br><br>”);
  8.             }
  9.             data.append(“</body></html>”);
  10. preWebView.loadDataWithBaseURL(“”, data, “text/html”, “UTF-8″,””);
[java][/java] view plaincopy

  1. /**
  2.    * 显示本地图片和文字混合的Html内容
  3.    */
  4.   private void localHtmlImage() {
  5.     try {
  6.       String data = “<HTML>在模拟器 2.1 上测试,这是<IMG src=\”APK’>file:///android_asset/igg.jpg\”/>APK里的图片”;
  7.       // SDK1.5本地文件处理(不能显示图片)
  8.       //MyWebView.loadData(URLEncoder.encode(data, encoding), mimeType, encoding);
  9.       // SDK1.6及以后版本
  10.       //MyWebView.loadData(data, mimeType, encoding);
  11.       // 本地文件处理(能显示图片)
  12.       MyWebView.loadDataWithBaseURL(null, data, mimeType, encoding, null);
  13.     } catch (Exception ex) {
  14.       ex.printStackTrace();
  15.     }
  16.   }

 2.加载本地html文件代码方式有loadUrl():

[java][/java] view plaincopy

  1. /**
  2.    * 显示本地图片文件
  3.    */
  4.   private void localImage() {
  5.     try {
  6.       // 本地文件处理
  7.       String str = “file:///android_asset/icon.png”;
  8.       MyWebView.loadUrl(str);
  9.     } catch (Exception ex) {
  10.       ex.printStackTrace();
  11.     }
  12.   }
  13.   /**
  14.    * 显示本地网页文件
  15.    */
  16.   private void localHtml() {
  17.     try {
  18.       // 本地文件处理(如果文件名中有空格需要用+来替代)
  19.       MyWebView.loadUrl(“file:///android_asset/test.html”);
  20.     } catch (Exception ex) {
  21.       ex.printStackTrace();
  22.     }
  23.   }

 3.加载在线网页html代码方式有loadUrl():

[java][/java] view plaincopy

  1. /**
  2.    * 直接网页显示
  3.    */
  4.   private void webHtml() {
  5.     try {
  6.       MyWebView.loadUrl(“http://www.google.com”);
  7.     } catch (Exception ex) {
  8.       ex.printStackTrace();
  9.     }
  10.   }
  11.   /**
  12.    * 直接网络图片显示
  13.    */
  14.   private void webImage() {
  15.     try {
  16.       MyWebView .loadUrl(“http://www.google.com.hk/intl/zh-CN/images/logo_cn.gif”);
  17.     } catch (Exception ex) {
  18.       ex.printStackTrace();
  19.     }
  20.   }

标签