WebView載入方的方式,WebView載入方式
WebView載入有3中方式: 1> WebView .loadUrl(String strhtml); 用於載入網頁的內容,注意需要加許可權 "" 本地串連放在assets檔案下, WebView.loadUrl("file:///android_aasset/html/") 2> WebView .loadData(String data, String mimeType, String encoding); data:檔案要載入的網路內容 mimeType 載入網頁內容的類型(type/html,image/jpeg) encoding 載入網路內容所設定的編碼格式(gbk/utf-8); 3> LoadDataWithBaseURL() 一般用WebView.loadDataWithBaseURL(String baseUrl, String data, String mimeType, String encoding, String historyUrl) 跟loadData相比,優先選擇
一般要支援js,要設定 WebSessings settings=webview.getAebSettings(); 要設定其屬性
WebSettings, WebViewClient, WebChromClient相對於WebView的功能
1 . WebSetting是用於設定WebView的實行和狀態,
WebSettings webSettings=mWebView.getSettings();
//設定支援js *****************必須設定,預設值為false
settings.setJavaScriptEnabled(true);
//設定支援縮放
settings.setBuiltInZoomControls(true);
//設定支援載入圖片
wSet.setBlockNetworkImage(false);
//設定支援緩衝
settings.setAppCacheEnabled(true);
//設定緩衝模式為預設
settings.setCacheMode(WebSettings.LOAD_DEFAULT);
settings.setCacheMode(WebSettings.LOAD_DEFAULT);
setAllowFileAccess 啟用或禁止WebView訪問檔案資料
setBlockNetworkImage 是否顯示網狀圖像
setBuiltInZoomControls 設定是否支援縮放
setCacheMode 設定緩衝的模式
setDefaultFontSize 設定預設的字型大小
setDefaultTextEncodingName 設定在解碼時使用的預設編碼
setFixedFontFamily設定固定使用的字型
setJavaScriptEnabled 設定是否支援Javascript
setLayoutAlgorithm 設定布局方式
setLightTouchEnabled 設定用滑鼠啟用被選項
setSupportZoom 設定是否支援變焦
WebViewClient就是專門輔助WebView處理各種通知、請求等事件的類。可以通過WebView的setWebViewClient方法來指定一個WebViewClient對象。WebViewClient提供了如下的一些方法,我們可以覆蓋這些方法來輔助WebView瀏覽網頁,代碼如下(我們設定覆蓋shouldOverrideUrlLoading方法,使得當有新串連時,使用當前的WebView來顯示):
public boolean shouldOverrideUrlLoading(WebView view,String url){
view.loadUrl(url);
return true;
}預設值為true------阻止 ,表示當前串連不能再當前wenView中載入,false表示攔截
onPageFinished 網頁載入完畢
onPageStarted 網頁開始載入
onReceivedError 報告錯誤資訊
onScaleChanged WebView發生改變
shouldOverrideUrlLoading 控制新的串連在當前WebView中開啟
補充:對”Back”按鍵的處理:如果用webview點連結看了很多頁以後,如果不做任何處理,點擊系統“Back”鍵,整個webView進程會調用finish()而結束自身,如果希望瀏覽的網頁回退而不是退出瀏覽器,需要在當前Activity中處理並消費掉該Back事件。
覆蓋Activity類的onKeyDown(int keyCoder,KeyEvent event)方法。
webview.goBack(); //goBack()表示返回webView的上一頁面
經過實踐,筆者發現,loadData不能載入圖片內容,如果要載入圖片內容或者獲得更強大的Web支援請使用loadDataWithBaseURL。
2. 許多實用loadData方法的朋友都遇到顯示亂碼的問題,那是因為編碼器設定錯誤導致的。我們知道String類型的資料主要是unicode編碼,而WebView一般為了節省資源使用的是UTF-8編碼,所以我們在loadData的時候要告訴方法怎樣轉碼。即要告訴它要將unicode編碼的內容轉成UTF-8編碼的內容。有些朋友雖然在loadData的時候設定了編碼方式,但是還是顯示亂碼,這是因為還需要為WebView的text編碼指定編碼方式。舉例如下:
WebView wv = (WebView)findViewById(R.id.webview) ;
String content = getUnicodeContent() ;
wv.getSettings().setDefaultTextEncodingName(“UTF -8”) ;
wv.loadData(content, “text/html”, “UTF-8”) ;
代碼如下:
WebSettings wSet = wView.getSettings();
wSet.setJavaScriptEnabled(true);
//設定支援縮放
wSet.setBuiltInZoomControls(true);
//設定支援載入圖片
wSet.setBlockNetworkImage(false);
//設定支援緩衝
wSet.setAppCacheEnabled(true);
//設定緩衝模式為預設
wSet.setCacheMode(WebSettings.LOAD_DEFAULT);
wSet.setCacheMode(WebSettings.LOAD_DEFAULT);
mt_rel = (RelativeLayout) findViewById(R.id.mt_rel);
// 建立WebViewClient對象
WebViewClient wvc = new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
// 使用自己的WebView組件來響應Url載入事件,而不是使用預設瀏覽器器載入頁面
wView.loadUrl(url);
// 記得消耗掉這個事件。給不知道的朋友再解釋一下,Android中返回True的意思就是到此為止吧,事件就會不會冒泡傳遞了,我們稱之為消耗掉
return true;
}
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
super.onPageStarted(view, url, favicon);
}
@Override
public void onPageFinished(WebView view, String url) {
//Toast.makeText(getApplicationContext(), "WebViewClient.onPageFinished", Toast.LENGTH_SHORT).show();
super.onPageFinished(view, url);
mCustomDialog.dismiss();;
}
@Override
public void onLoadResource(WebView view, String url) {
//Toast.makeText(getApplicationContext(), "WebViewClient.onLoadResource", Toast.LENGTH_SHORT).show();
super.onLoadResource(view, url);
}
@Override
public void onReceivedError(WebView view, int errorCode,String description, String failingUrl) {
//Toast.makeText(getApplicationContext(), "WebViewClient.onReceivedError", Toast.LENGTH_SHORT).show();
super.onReceivedError(view, errorCode, description, failingUrl);
}
@Override
public void onScaleChanged(WebView view, float oldScale, float newScale) {
//Toast.makeText(getApplicationContext(), "WebViewClient.onScaleChanged", Toast.LENGTH_SHORT).show();
super.onScaleChanged(view, oldScale, newScale);
}
};
//webView的緩衝:點擊返回鍵
/**
* WebView對於Back按鍵的響應是整個退出,如果希望一級一級退出,則需要監聽Back按鍵
* 監聽按鍵彈起的狀態
* 返回值 true表示在此攔截,不再向下傳遞
*/
@Override
public boolean onKeyUp(int keyCode, KeyEvent event) {
Log.d(TAG, "onKeyUp keyCode: " + keyCode);
if(keyCode == KeyEvent.KEYCODE_BACK && mWebView.canGoBack()){
mWebView.goBack();
return true;
}
return super.onKeyUp(keyCode, event);
}
由此可見:
loadData("<html><head>test<a href=\"http://wap.bai.com\">中文</a></html>", "text/html", "UTF-8");
最好使用: LOadDataWithBaseUrl();方法進行載入。
老於始終堅信:
沒有做不到的,只有想不到了。
最後附上自己的部落格地址:http://blog.csdn.net/androidstarjack
歡迎大家與老於一起進行探究和學習