webview是android中的浏覽器控件,在一些手機應用中常會用到b/s模式去開發應用,這時webview的強大功能就會顯示出來。
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
2、事件監聽對象(webviewclient)
事件監聽對象webviewclient中,主要有如下幾個常用方法:
shouldoverrideurlloading:在web頁面裡單擊連結的時候,會自動調用android自帶的浏覽器來打開連結,需要通過該方法在本頁面打開;
@override
public boolean shouldoverrideurlloading(webview view, string url) {
view.loadurl(url);
return true;
}
onloadresource:加載資源時響應
onpagestart:在加載頁面時響應
onpagefinish:在加載頁面結束時響應
onreceiveerror:在加載出錯時響應
onreceivedhttpauthrequest:
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事件處理之前執行)。