android webview 注意事項

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 

要注意的是,其中的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



二、WebViewClient的方法說明

1、public boolean shouldOverrideUrlLoading(WebView view, String url) { 
       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);
        }
在頁面加載結束時調用。
原文地址:

http://blog.csdn.net/jackyhuangch/article/details/8310033

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章