WebView加載方的方式

gbd8 9年前發布 | 72K 次閱讀 WebView Android開發 移動開發

WebView加載有3中方式:

            1> WebView .loadUrl(String strhtml); 用于加載網頁的內容,注意需要加權限  ""

                本地連接放在assets文件下, WebView.loadUrl("file:///android_aasset/html/")

            2>   WebView .loadData(String data, String mimeType, String encoding);

                    data:文件要加載的網絡內容

                    mimeType 加載網頁內容的類型(type/html,image/jpeg)

                    encoding  加載網絡內容所設置的編碼格式(gbk/utf-8);

            3>   LoadDataWithBaseURL()

                一般用WebView.loadDataWithBaseURL(String baseUrl, String data, String mimeType, String encoding, String                

                historyUrl)     跟loadData相比,優先選擇

    一般要支持js,要設置      WebSessings  settings=webview.getAebSettings();   要設置其屬性

   WebSettings, WebViewClient, WebChromClient相對于WebView的功能
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處理各種通知、請求等事件的類。可以通過WebViewsetWebViewClient方法來指定一個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的時候設置了編碼方式,但是還是顯示亂碼,這是因為還需要為WebViewtext編碼指定編碼方式。舉例如下:

               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();  
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對象 
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();方法進行加載。

 本文由用戶 gbd8 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!