Android UI界面學習之WebView(網絡視圖)

Android中使用WebView來顯示網頁內容。使用WebView需要下面幾個步驟:

1、在Android.manifest中添加訪問互聯網的權限:

首先要在manifest.main文件中創建一個webview,然後再activity中定義這個webview然後進行一下相關操作。
1、添加權限:AndroidManifest.xml中必須使用許可"android.permission.INTERNET",否則會出Web pagenot available錯誤。
2、在要Activity中生成一個WebView組件:WebView webView = newWebView(this);
3、設置WebView基本信息:
          如果訪問的頁面中有Javascript,則webview必須設置支持Javascript。
         webview.getSettings().setJavaScriptEnabled(true);  
          觸摸焦點起作用
          requestFocus();
          取消滾動條
         this.setScrollBarStyle(SCROLLBARS_OUTSIDE_OVERLAY);
4如果希望點擊鏈接由自己處理,而不是新開Android的系統browser中響應該鏈接。給WebView添加一個事件監聽對象(WebViewClient)並重寫其中的一些方法 shouldOverrideUrlLoading:對網頁中超鏈接按鈕的響應。 當按下某個連接時WebViewClient會調用這個方法,並傳遞參數:按下的url 
                onLoadResource   
                onPageStart  
                onPageFinish  
                onReceiveError
                onReceivedHttpAuthRequest

5、如果訪問的頁面中有Javascript,則webview必須設置支持Javascript ,否則顯示空白頁面。
Java代碼
      webview.getSettings().setJavaScriptEnabled(true);  
6
、如果頁面中鏈接,如果希望點擊鏈接繼續在當前browser中響應,而不是新開Android的系統browser中響應該鏈接,必須覆蓋webviewWebViewClient對象:
Java代碼
1.   mWebView.setWebViewClient(new WebViewClient(){   
2.       public boolean shouldOverrideUrlLoading(WebView view, String url) {   
3.           view.loadUrl(url);   
4.           return true;   
5.       }   
6.   });  
上述方法告訴系統由我這個WebViewClient處理這個Intent,我來加載URL。點擊一個鏈接的Intent是向上冒泡的,shouldOverrideUrlLoading方法return true表示我加載後這個Intent就消費了,不再向上冒泡了。

7
、如果不做任何處理,在顯示你的Brower UI時,點擊系統“Back”鍵,整個Browser會作爲一個整體“Back"到其他Activity中,而不是希望的在Browser的歷史頁面中 Back。如果希望實現在歷史頁面中Back,需要在當前Activity中處理並消費掉該Back事件:
Java代碼
1.   public boolean onKeyDown(int keyCode, KeyEvent event) {   
2.       if ((keyCode == KeyEvent.KEYCODE_BACK) && mWebView.canGoBack()) {   
3.           mWebView.goBack();   
4.           return true;   
5.       }   
6.       return super.onKeyDown(keyCode, event);   
7.   }  
對於Android 2.0開始又多出了一種新的方法,對於Activity 可以單獨獲取Back鍵的按下事件,直接重寫                 onBackPressed 方法即可,代碼如下
Java代碼
@Override
1
public void onBackPressed() {
2
     // 這裏處理邏輯代碼,該方法僅適用於2.0或更高版本的sdk
3
    return ;
4
}

這裏還有幾個知識點:

1)爲了讓WebView從apk文件中加載 assets,Android SDK提供了一個schema,前綴爲"file:///android_asset/"。WebView遇到這樣的schema,就去當前包中的 assets目錄中找內容。如上面的"file:///android_asset/demo.html"

2)addJavascriptInterface方法中要綁定的 Java對象及方法要運行另外的線程中,不能運行在構造他的線程中,這也是使用Handler的目的。

加上進度條:

  1.  webView.setWebChromeClient(new WebChromeClient() 
  2.                   {          
  3.                           public void onProgressChanged(WebView view, int progress)   
  4.                           {            
  5.                                   activity.setTitle("Loading...");       
  6.                                   activity.setProgress(progress * 100);     
  7.                                   if(progress == 100)            
  8.                                           activity.setTitle(R.string.app_name);       
  9.                                   }      
  10.                           }
  11.                   );      

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