WebView載入方的方式,WebView載入方式

來源:互聯網
上載者:User

WebView載入方的方式,WebView載入方式
 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處理各種通知、請求等事件的類。可以通過WebView的setWebViewClient方法來指定一個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的時候設定了編碼方式,但是還是顯示亂碼,這是因為還需要為WebView的text編碼指定編碼方式。舉例如下:

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


老於始終堅信:

沒有做不到的,只有想不到了。

最後附上自己的部落格地址:http://blog.csdn.net/androidstarjack
歡迎大家與老於一起進行探究和學習


 


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.