在开发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代码例子如下写法:
StringBuilder data = new StringBuilder("<html><body bgcolor=\"#F2F6F8\">"); int size = paperList.size(); for(int i = 0;i < size;i++){ if(!StringUtils.isEmpty(paperList.get(i).getFilePath())){ data.append("<center>").append("<img src = \"file://"+paperList.get(i).getFilePath()+"\">").append("</center><br>"); } data.append("<center>").append("<font color=\"#000000\">"+paperList.get(i).getContent()+"</font>").append("</center><br><br>"); } data.append("</body></html>"); preWebView.loadDataWithBaseURL("", data, "text/html", "UTF-8","");
/** * 显示本地图片和文字混合的Html内容 */ private void localHtmlImage() { try { String data = "<HTML>在模拟器 2.1 上测试,这是<IMG src=\"APK'>file:///android_asset/igg.jpg\"/>APK里的图片"; // SDK1.5本地文件处理(不能显示图片) //MyWebView.loadData(URLEncoder.encode(data, encoding), mimeType, encoding); // SDK1.6及以后版本 //MyWebView.loadData(data, mimeType, encoding); // 本地文件处理(能显示图片) MyWebView.loadDataWithBaseURL(null, data, mimeType, encoding, null); } catch (Exception ex) { ex.printStackTrace(); } }
2.加载本地html文件代码方式有loadUrl():
/** * 显示本地图片文件 */ private void localImage() { try { // 本地文件处理 String str = "file:///android_asset/icon.png"; MyWebView.loadUrl(str); } catch (Exception ex) { ex.printStackTrace(); } } /** * 显示本地网页文件 */ private void localHtml() { try { // 本地文件处理(如果文件名中有空格需要用+来替代) MyWebView.loadUrl("file:///android_asset/test.html"); } catch (Exception ex) { ex.printStackTrace(); } }
3.加载在线网页html代码方式有loadUrl():
/** * 直接网页显示 */ private void webHtml() { try { MyWebView.loadUrl("http://www.google.com"); } catch (Exception ex) { ex.printStackTrace(); } } /** * 直接网络图片显示 */ private void webImage() { try { MyWebView .loadUrl("http://www.google.com.hk/intl/zh-CN/images/logo_cn.gif"); } catch (Exception ex) { ex.printStackTrace(); } }