1. 程式人生 > >Android中WebView最常用的屬性

Android中WebView最常用的屬性

WebView基本使用:

1、載入網頁、重新整理網頁、前進、後退

在xml檔案中

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

在java程式碼中:

WebView wvTest = (WebView)findViewById(R.id.wv_banner);
//載入網路網頁
wvTest.loadUrl("http://www.baidu.com");
//載入本地網頁
wvTest.loadData
("file:///android_asset/refresh/refresh.html"); //返回上個頁面 if(wvTest.canGoBack()){ wvTest.goBack(); } //去剛才瀏覽的頁面 if(wvTest.canGoForward()){ wvTest.goForward(); } //重新整理當前頁面 wvTest.reload();
2、設定一些引數

注: 需要用到什麼設定,隨時查一下即可。最後一條在載入含有Html5新標籤的網頁的時候需要加上這句話。

WebSettings settings = wvTest.getSettings();
settings.setJavaScriptEnabled
(true);//支援javascript settings.setUseWideViewPort(true);//適配螢幕 settings.setLoadWithOverviewMode(true); settings.setBuiltInZoomControls(true);//支援放大縮小 settings.setDisplayZoomControls(false);//隱藏放大縮小的按鈕 settings.setDomStorageEnabled(true);//支援Html5標籤 ……等
3、獲取網頁標題
class MyWebViewChromeClient extends WebChromeClient
{
@Override public void onReceivedTitle(WebView view, String title) { super.onReceivedTitle(view, title); L.D("title就是網頁標題:" + title); } } wvTest.setWebChromeClient(new MyWebViewChromeClient());
4、下載檔案
wvTest.setDownloadListener(new DownloadListener() {
    @Override
    public void onDownloadStart(String url, String userAgent,
                    String contentDisposition, String mimetype, long contentLength) {
        //需要下載的檔案的地址就是url,及可以下載檔案        
    }
});

呼叫系統瀏覽器去下載檔案(updateUrl是下載地址):

Intent intent= new Intent();
intent.setAction("android.intent.action.VIEW");
Uri content_url = Uri.parse(updateUrl);
intent.setData(content_url);  
startActivity(Intent.createChooser(intent, "請選擇瀏覽器"));
5、WebView錯誤碼處理

就在網頁載入失敗、沒有網路的情況下WebView會把載入的網頁地址顯示出來。為了避免這種情況,我們需要做如下處理:

class MyWebViewClient extends WebViewClient{
    @Override
    public void onReceivedError(WebView view, int errorCode,
            String description, String failingUrl) {
        super.onReceivedError(view, errorCode, description, failingUrl);
                    //在這裡進行載入錯誤、沒有網路情況的處理
                    //方式1:載入一個本地的預設頁面
                    wvTest.loadData("file:///android_asset/refresh/refresh.html");
                    //方式2:顯示一個預設佈局
                    tvDefault.setText("網頁載入失敗");
                    wvTest.setVisibility(View.GONE);
    }
}
wvTest.setWebViewClient(new MyWebViewClient());
6、和JavaScript互動(簡單的呼叫、傳值)

Java程式碼:

//被javascript呼叫的類
class CalledByJs {
    private Context mContext;
    public CalledByJs(Context context){
        this.mContext = context;
    }
            //在js中被呼叫的方法
    @JavascriptInterface
    public void callFromJs(){
        Toast.makeText(mContext, "js呼叫啦~", Toast.LENGTH_LONG).show();
    }
}

settings.setJavaScriptEnabled(true);
wvTest.addJavascriptInterface(new CalledByJs(this), "demo");

JavaScript程式碼:

function call(){
    demo.callFromJs();
}
<img src="img/refreshicon.png" onclick="call()" alt="輕觸螢幕重新重新整理" />
7、WebView自定義攔截
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
  if(!TextUtils.isEmpty(url)){
    if("open_login".equals(url)){
        Intent intent = new Intent(this,LoginActivity.class);
        startActivity(intent);
        return true;
    }else {
        return false;
    }
  }
  return super.shouldOverrideUrlLoading(view, url);
}

這裡解釋一下這個方法的返回值:
返回true:
webview處理url是根據程式來執行的。即:如果返回為true,即不再會通過webview載入,而是執行你寫的攔截的程式,如果沒有的話就不執行(不執行就是,內容有href,超連結也不會跳轉了)

返回false:
webview處理url是在webview內部執行。返回false的話就可以執行內容的超連結跳轉。

8、獲取Web頁面的標題,顯示Web載入進度

其中顯示Web頁面載入進度有兩種方式:

class MyChromeClient extends WebChromeClient{
    //獲取Web頁面標題
    @Override
    public void onReceivedTitle(WebView view, String title) {
        title(title);
        if(TextUtils.isEmpty(shareDesc)){
            shareDesc = title;
            shareTitle = title;
        }
    }
    //顯示Web頁面載入進度 方式1:
    @Override
    public void onProgressChanged(WebView view, int newProgress){
         if (newProgress == 100) {
             pbWebLoad.setVisibility(View.GONE);
         } else {
             if (View.GONE == pbWebLoad.getVisibility()) {
                 pbWebLoad.setVisibility(View.VISIBLE);
             }
             pbWebLoad.setProgress(newProgress);
         }
         super.onProgressChanged(view, newProgress);
    }
}

//顯示Web頁面載入進度 方式2:
private class MyWebViewClient extends WebViewClient{
@Override
    public void onPageStarted(WebView view, String url, Bitmap favicon) {
        super.onPageStarted(view, url, favicon);
        //彈Loading框進行載入
    }

    @Override
    public void onPageFinished(WebView view, String url) {
        super.onPageFinished(view, url);
        //消失Loading框,載入完畢
    }
}
9、清空WebView快取
/**
 * WebView清空快取
 */
public static void clearCache(Context context) {
    CookieSyncManager cookieSyncMngr = CookieSyncManager.createInstance(context);
    CookieManager cookieManager = CookieManager.getInstance();
    cookieManager.removeAllCookie();
    context.deleteDatabase("webview.db");
    context.deleteDatabase("webviewCache.db");
    context.deleteDatabase("webviewCookiesChromium.db");
    context.deleteDatabase("webviewCookiesChromiumPrivate.db");
    //WebView 快取檔案  
    File webviewCacheDir = new File(context.getCacheDir().getAbsolutePath()+"/webviewCacheChromium");  
    //刪除webview 快取目錄  
    if(webviewCacheDir.exists()){  
        deleteFile(webviewCacheDir);  
    }  
}
10、訪問https地址
wvTest.setWebViewClient(new WebViewClient(){
        @Override
        public void onReceivedSslError(WebView view,SslErrorHandler handler, SslError error) {
            super.onReceivedSslError(view, handler, error);
            //handler.cancel(); // Android預設的處理方式
            handler.proceed();  // 接受所有網站的證書
            //handleMessage(Message msg); // 進行其他處理
        }
    });