WebView加載方的方式
一般要支持js,要設置 WebSessings settings=webview.getAebSettings(); 要設置其屬性
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();
// 創建WebViewClient對象
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 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();方法進行加載。