WebView三个方法区别(解决乱码问题)
最近使用WebView加載中文網(wǎng)頁的時(shí)候出現(xiàn)亂碼問題,網(wǎng)上整理下基本解決方法:
其實(shí)我發(fā)現(xiàn)這不管是在線還是離線顯示都可以使用LoadUrl方法!聯(lián)網(wǎng)時(shí)好像是默認(rèn)utf-8,離線讀取本地時(shí)需要設(shè)置默認(rèn)編碼!如果圖片無法離線顯示?參考:??http://androidturing.iteye.com/blog/1280946?
?
在網(wǎng)上看了許多關(guān)于WebView 的例子。但當(dāng)自己做起來時(shí),總是有些差別,是另一種體會(huì)。這節(jié)我就以 模擬器為2.1 為例來講。
?? WebView 主要調(diào)用三個(gè)方法:LoadUrl、LoadData、LoadDataWithBaseURL。
???? 1、LoadUrl??????? 直接加載網(wǎng)頁、圖片并顯示。(本地或是網(wǎng)絡(luò)上的網(wǎng)頁、圖片、gif)
注意!要提前設(shè)置編碼:webSettings.setDefaultTextEncodingName("UTF-8");
?
???? 2、LoadData???? 顯示文字與圖片內(nèi)容 (模擬器1.5、1.6)
???? 3、LoadDataWithBase? 顯示文字與圖片內(nèi)容(支持多個(gè)模擬器版本)
下面來看看代碼片段:
?
package com.webviewdemo; import java.net.URLEncoder; import android.app.Activity; import android.os.Bundle; import android.webkit.WebView; public class WebViewDemo extends Activity { private WebView MyWebView; static final String mimeType = "text/html"; static final String encoding = "utf-8"; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); // MyWebView = (WebView) findViewById(R.id.MyWebview); // this.webHtml(); // this.webImage(); // this.localHtmlZh(); // this.localImage(); // this.localHtml(); this.localHtmlImage(); } /** * 直接網(wǎng)頁顯示 */ private void webHtml() { try { MyWebView.loadUrl("http://www.google.com"); } catch (Exception ex) { ex.printStackTrace(); } } /** * 直接網(wǎng)絡(luò)圖片顯示 */ private void webImage() { try { MyWebView .loadUrl("http://www.google.com.hk/intl/zh-CN/images/logo_cn.gif"); } catch (Exception ex) { ex.printStackTrace(); } } /** * 中文顯示 */ private void localHtmlZh() { try { String data = "<html>在模擬器 2.1 上測(cè)試</html>"; // utf-8編碼處理(在SDK1.5模擬器和真實(shí)設(shè)備上都將出現(xiàn)亂碼,SDK1.6上能正常顯示) // MyWebView.loadData(data, mimeType, encoding); // 對(duì)數(shù)據(jù)進(jìn)行編碼處理(SDK1.5版本) MyWebView.loadData(URLEncoder.encode(data, encoding), mimeType, encoding); // MyWebView.loadDataWithBaseURL(null, data, mimeType, encoding, null); } catch (Exception ex) { ex.printStackTrace(); } } /** * 顯示本地圖片文件 */ private void localImage() { try { // 本地文件處理 String str = "file:///android_asset/icon.png"; MyWebView.loadUrl(str); } catch (Exception ex) { ex.printStackTrace(); } } /** * 顯示本地網(wǎng)頁文件 */ private void localHtml() { try { // 本地文件處理(如果文件名中有空格需要用+來替代) MyWebView.loadUrl("file:///android_asset/test.html"); } catch (Exception ex) { ex.printStackTrace(); } } /** * 顯示本地圖片和文字混合的Html內(nèi)容 */ private void localHtmlImage() { try { String data = "<HTML>在模擬器 2.1 上測(cè)試,這是<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(); } } }運(yùn)行 localHtmlImage(...) 這個(gè)方法的結(jié)果:
在上面的所有方法中,模擬器2.1下 調(diào)用 LoadData 方法總是出現(xiàn)亂碼。我想應(yīng)該是2.1已經(jīng)不在用它了吧。直接用LoadDataWithBaseURL 方法最簡單,不再牽涉編碼的轉(zhuǎn)換。
其實(shí)我發(fā)現(xiàn)這不管是在線還是離線顯示都可以使用LoadUrl方法!聯(lián)網(wǎng)是默認(rèn)utf-8,離線讀取本地時(shí)需要設(shè)置默認(rèn)編碼!
本地url寫法:
手機(jī)本地文件:?"file:///data/data/。。。“
SD:?"file:///mnt/sdcard/。。。“
?
如果圖片無法離線顯示 參考: ?http://androidturing.iteye.com/blog/1280946轉(zhuǎn)載于:https://www.cnblogs.com/rysinal/p/5834477.html
總結(jié)
以上是生活随笔為你收集整理的WebView三个方法区别(解决乱码问题)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: html-----020----事件
- 下一篇: 【读书笔记】基础博弈知识小结