1. 程式人生 > >android中webView 的基本使用與屬性總彙

android中webView 的基本使用與屬性總彙

為了使APP更加具有靈活性和可控制性,我們通常會在APP中內嵌運營人員可以自由切換的網頁。這時候我們就要用到一個神奇的控制元件webView。本篇文章由淺入深的詳細介紹webView 的使用與各項屬性,從最常用屬性到最不常用屬性依次進行了充分講解。(本文是由易到難,由常用屬性到不常用屬性對webView進行了全面講解,如非小白基礎內容可直接跳過)

一,我們先從最基本的功能入手,實現網頁的展示。

1,首先在佈局中新增webView控制元件,新增網路許可權。

控制元件:

<WebView 
    android:layout_width="match_parent"
    android:layout_height
="match_parent" android:id="@+id/webView" />

許可權:

<uses-permission android:name="android.permission.INTERNET"/>

2,為控制元件載入資源。

webView = (WebView) findViewById(R.id.webView);
//載入本地資源
//webView.loadUrl("file:///android_asset/house.html");
//載入網路資源
webView.loadUrl("http://daiba.com");

本地資源必須是.html格式。存放於assets資料夾內。
這裡寫圖片描述


注意assets的層級關係。

3,重寫webView的返回邏輯,如果不重寫以下程式碼,網頁跳轉到多級頁面後按返回鍵不會返回到上一級頁面而會作用在APP的webView頁上。

@Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if (keyCode == KeyEvent.KEYCODE_BACK
                && event.getRepeatCount() == 0) {
            if (keyCode == KeyEvent.KEYCODE_BACK && webViewency.canGoBack()) {
                webViewency.goBack();//返回上個頁面
} else { finish(); } } return true; }

二,webView常用功能。

1,監聽網頁的跳轉和資源的載入

webView.setWebViewClient(new WebViewClient(){
           @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            // TODO Auto-generated method stub
              if (url.contains("daiba")) {
               //如果網址中有daiba字樣,程式將走這裡。可以做intent跳轉
               Intent in = new Intent(A.this,B.class);
               startActivity(in);
               return true;
               }else{
               //如果沒有走這裡,繼續載入網頁。
               view.loadUrl(url);
                //返回值為true的時用WebView開啟,為false時呼叫系統瀏覽器或第三方瀏覽器開啟網路資源,如果沒有判斷語句可在最下方更改返回值。
                return true;
               }


            return super.shouldOverrideUrlLoading(view, url);
        }
       });

2,檢視網頁的載入進度

 webView.setWebChromeClient(new WebChromeClient() {
            @Override
            public void onProgressChanged(WebView view, int newProgress) {
                // TODO Auto-generated method stub
                if (newProgress == 100) {
                    // newProgress代表網頁載入進度,到達100完成載入

                } else {
                    // 正在載入中

                }

            }
        });

3,完善網頁快取機制

webView.getSettings().setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);
/*LOAD_CACHE_ELSE_NETWORK是預設的網路快取機制這裡不建議使用,建議使用LOAD_DEFAULT。
前者在H5頁面更新後容易出現頁面錯亂。
如果網頁的cache-control為no-cache,在模式LOAD_DEFAULT下,根據cache-control(網頁是否更新過)
決定是否從網路上取資料,如果更新過就重新獲取沒有更新過使用快取,斷網時會出現錯誤頁面;
在LOAD_CACHE_ELSE_NETWORK模式下,無論是否有網路,只要本地有快取,都使用快取。
本地沒有快取時才從網路上獲取。
如果網頁的的cache-control為max-age=60,在兩種模式下都使用本地快取資料
為了建立完善的快取機制,建議先判斷是否網路情況正常,正常情況使用使用LOAD_DEFAULT,
無網路時,使用LOAD_CACHE_ELSE_NETWORK。*/

快取模式(5種)
LOAD_CACHE_ONLY:不使用網路,只讀取本地快取資料
LOAD_DEFAULT:根據cache-control決定是否從網路上取資料。
LOAD_CACHE_NORMAL: API level 17中已經廢棄, 從API level 11開始作用同LOAD_DEFAULT模式
LOAD_NO_CACHE:不使用快取,只從網路獲取資料.
LOAD_CACHE_ELSE_NETWORK,只要本地有,無論是否過期,或者no-cache,都使用快取中的資料。

三,載入複雜網頁時對webView的簡單除錯

public class MainActivity extends BaseActivity {
private WebView webView;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.test);             
        init();
    }


    private void init(){
       mWebView = (WebView) findViewById(R.id.webView);
        //WebView載入web資源
       mWebView.loadUrl("http://daiba.com");
        /* 設定支援Js,必須設定的,基本大多數網頁都涉及js */  
        mWebView.getSettings().setJavaScriptEnabled(true);  
        /* 設定為true時表示支援使用js開啟新的視窗 */  
       mWebView.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);  
        /* 當網頁需要儲存數時據,設定下面屬性 */  
        mWebView.getSettings().setDomStorageEnabled(true);  
        /* 設定為使用webview推薦的視窗,主要是為了配合下一個屬性 */  
        mWebView.getSettings().setUseWideViewPort(true);  
        /* 設定網頁自適應螢幕大小,該屬性必須和上一屬性配合使用 */  
        mWebView.getSettings().setLoadWithOverviewMode(true);  
        /* 啟用還H5的地理定位服務 */  
        mWebView.getSettings().setGeolocationEnabled(true);  
        /* 設定是否允許webview使用縮放的功能 */  
        mWebView.getSettings().setBuiltInZoomControls(false);  
        /* 提高網頁渲染的優先順序 */  
        mWebView.getSettings().setRenderPriority(RenderPriority.HIGH);  
        /* 設定是否顯示水平滾動條 */  
        mWebView.setHorizontalScrollBarEnabled(false);  
        /* 設定垂直滾動條是否有疊加樣式 */  
        mWebView.setVerticalScrollbarOverlay(true);  
        /* 設定滾動條的樣式 */  
        mWebView.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY);  

        }

}