1、webview的幾點設置
權限設置:.AndroidManifest.xml中必須使用許可"android.permission.INTERNET",否則會出Web page not available錯誤
js開放設置: 如果訪問的頁面中有Javascript,則webview必須設置支持Javascript。webview.getSettings().setJavaScriptEnabled(true); 否則,頁面的js將不會起作用.
滾動條設置:this.setScrollBarStyle(SCROLLBARS_OUTSIDE_OVERLAY);
設置緩存模式:setCacheMode
要注意的是,其中的webView的一系列用法,比如 webView.getSettings().setJavaScriptEnabled(true);設置可以使用javscript;
webView.getSettings().setJavaScriptEnabled(true);
webView.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY);
webView.setHorizontalScrollBarEnabled(false);
webView.getSettings().setSupportZoom(true);
webView.getSettings().setBuiltInZoomControls(true);
webView.setInitialScale(70);
webView.setHorizontalScrollbarOverlay(true);
2、在WebView的設計中,WebView主要完成解析、渲染界面。其他交給
(1)、事件監聽對象(WebViewClient) 處理各種通知、請求事件的,具體來說包括:
事件監聽對象WebViewClient中,主要有如下幾個常用方法:
shouldOverrideUrlLoading:在web頁面裏單擊鏈接的時候,會自動調用android自帶的瀏覽器來打開鏈接,需要通過該方法在本頁面打開;
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}
onLoadResource:加載資源時響應
onPageStart:在加載頁面時響應
onPageFinish:在加載頁面結束時響應
onReceiveError:在加載出錯時響應
onReceivedHttpAuthRequest:
(2)、WebChromeClient是輔助WebView處理Javascript的對話框,網站圖標,網站title,加載進度等
onCloseWindow(關閉WebView)
onCreateWindow()
onJsAlert (WebView上alert是彈不出來東西的,需要定製你的WebChromeClient處理彈出)
onJsPrompt
onJsConfirm
onProgressChanged
onReceivedIcon
onReceivedTitle
3、返回處理
如果不做任何處理,瀏覽網頁,點擊系統“Back”鍵,整個Browser會調用finish()而結束自身,如果希望瀏覽的網 頁回退而不是推出瀏覽器,需要在當前Activity中處理並消費掉該Back事件。
public boolean onKeyDown(int keyCode, KeyEvent event) {
if ((keyCode == KeyEvent.KEYCODE_BACK) && mWebView.canGoBack()) {
mWebView.goBack();
return true;
}
return super.onKeyDown(keyCode, event);
}
4、支持javascripte自定義對象
可以通過addJavascriptInterface()方法,添加js自定義對象,使用web頁面與手機java程序能夠進行通信交互。
5、DownloadListener接口
該接口裏面有一個方法,onDownloadStart()下載偵聽接口,如果客戶代碼實現該接口,則在下載開始、失敗、掛起、完成等情況下,DownloadManagerCore對象會調用客戶代碼中實現的DownloadListener方法。
6、幾個注意點
1)爲了讓WebView從apk文件中加載assets,Android SDK提供了一個schema,前綴爲"file:///android_asset/"。WebView遇到這樣的schema,就去當前包中的 assets目錄中找內容。如上面的"file:///android_asset/demo.html"
2)addJavascriptInterface方法中要綁定的Java對象及方法要運行另外的線程中,不能運行在構造他的線程中,這也是使用 Handler的目的(今天我是在沒有在handler中處理,所以導致webviewclient中的onPageStart方法與addJavascriptInterface中的方法起了衝突,二個人的執行順序時常互換,之後改成handlder實現,就解決其中的問題,正確的順序是onPageStart在addJavascriptInterface中的handlder事件處理之前執行)。
原文地址:
http://www.haogongju.net/art/2273208
view.loadUrl(url);
return true;
}
在點擊請求的是鏈接是纔會調用,重寫此方法返回true表明點擊網頁裏面的鏈接還是在當前的webview裏跳轉,不跳到瀏覽器那邊。
2、public void onReceivedSslError(WebView view, SslErrorHandler handler, android.net.http.SslError error) {
handler.proceed();
}
重寫此方法可以讓webview處理https請求。
3、public boolean shouldOverrideKeyEvent(WebView view, KeyEvent event) {
return super.shouldOverrideKeyEvent(view, event);
}
}
重寫此方法才能夠處理在瀏覽器中的按鍵事件。
4、 public void onLoadResource(WebView view, String url) {
// TODO Auto-generated method stub
if (DEBUG) {
Log.d(TAG, " onLoadResource ");
}
super.onLoadResource(view, url);
}
在加載頁面資源時會調用,每一個資源(比如圖片)的加載都會調用一次。
5、 public void onPageStarted(WebView view, String url, Bitmap favicon) {
// TODO Auto-generated method stub
if (DEBUG) {
Log.d(TAG, " onPageStarted ");
}
if (url.endsWith(".apk")) {
download(url);//下載處理
}
super.onPageStarted(view, url, favicon);
}
在頁面加載開始時調用。
6、public void onPageFinished(WebView view, String url) {
// TODO Auto-generated method stub
if (DEBUG) {
Log.d(TAG, " onPageFinished ");
}
super.onPageFinished(view, url);
}
在頁面加載結束時調用。