webview中使用loaddata函数显示内存中网页数据

作者:Young.Liu 分类: 技术 发布于:2013-11-1 18:50 ė2232次浏览 60条评论

在安卓中,如果要想要使用webview组件显示一个已经存在的html文件可以使用loadurl函数(网址或本地文件),但是如果需要使用动态的html数据,最方便的方法就是加载内存中的数据,而使用loaddata函则可以解决这个问题。

示例如下:


String data = "<html><body>content</body></html>";

String mime =  "'text/html'";

String encoding = "utf-8";

WebView.loadData(data, mimeType, encoding);


以上代码可以正常显示在内存中自定义的网页数据,解决了初步问题,下面又有一个问题出来了:如何显示中文呢? 

比如上面data="<html><body>正文</body></html>";

中文在以上的代码示例中无法正常显示,会出现乱码,不论你的encoding传入的编码方式是如何的。这个貌似是bug?


解决中文乱码的问题可以使用语句显示声明编码,使用下载代码可以实现:

WebView.getSettings().setDefaultTextEncodingName(“UTF -8”) ;


当然,你的动态内容不仅仅可以是简单的文本,相信使用webview组件的人都想使用它所支持的html5技术,所以加载图片,音频,视频之类的就成了理所当然的需求了,但是你可能也意识到了,使用loadData方法是无法加载本地资源的,因为它没有指定资源所在的根目录。于是就有了下面这个函数以方便使用本地资源:WebView.loadDataWithBaseURL(baseUrl, data, mimeType, encoding, historyUrl)

仔细看看它的参数命名就可以知道了个大概,baseUrl这个参数就是用来指定资源所在的根目录的,data中的一切路径都是相对于这个路径来说的,下面给出一个简单示例:


String contentForShowing = "<html><body><audio controls=\"controls\"><source src=\"test.mp3\" type=\"audio/mpeg\"> Your browser does not support the audio tag.</audio><br>test.mp3<br><br>";
</body></html>
";

soundWebView.loadDataWithBaseURL("file:///sdcard/", contentForShowing, "text/html", "utf-8", null);



其中test.mp3是在内存卡根目录下的(file:///sdcard/),当然这个位置你可以随便放置,只要记得修改baseUrl这个参数就可以了。


以上就是使用webview这个组件简单的加载内存中网页数据的方法,感觉不论是第一个方法还是第二个方法中指定encoding编码的参数都有问题,具体再议。

本文出自 我的技术积累,转载时请注明出处及相应链接。


Ɣ回顶部