android.webkit.WebView/WebViewClient/WebChromeClient

使用android.webkit.WebView控件android

在xml佈局文件中定義web

<WebView緩存

  android:id=」@+id/webkit01」網絡

  android:layout:width=」fill_parent」app

  android:layout:height=」fill_parent」ide

  android:layout:weight=」1」 />佈局

在程序中使用WebView學習

mWebView = (WebView) findViewById(R.id.webview01);字體

mWebView.loadUrl(「http://www.google.com」);網站

經過WebSettings來設置WebView的屬性和狀態

WebSettings webSettings = mWebview.getSettings();

當WebView銷燬後,再使用WebSettings會拋出IllegalStateException異常。

WebSettings經常使用方法

1. setAllowFileAccess, 啓用/禁止WebKit訪問文件數據

2. setBlockNetworkImage, 是否顯示網絡圖像

3. setBuiltInZoomControls, 是否支持縮放

4. setCacheMode, 設置緩存模式

5. setDefaultFontSize, 設置默認字體大小

6. setDefaultTextEncodingName, 設置默認的解碼方式

7. setFixedFontFamily, 設置固定使用的字體

8. setJavaScriptEnabled, 是否支持JavaScript

9. setLayoutAlgorithm, 設置佈局方式

10. setLightTouchEnabled,

11. setSupportZoom, 是否支持變焦

 

使用WebViewClient

WebViewClient用來處理各類通知、請求等事件,WebView調用setWebViewClient()來指定一個WebViewClient對象。

WebViewClient經常使用方法

1. doUpdateVisitedHistory, 更新歷史記錄

2. onFormResubmission, 從新請求網頁數據

3. onLoadResource, 加載資源

4. onPageFinished, 網頁加載完畢

5. onPageStarted, 網頁開始加載

6. onReceivedError, 報告錯誤信息

7. onScaleChanged, 發生Scale改變

8. shouldOverrideUrlLoading, 控制新的鏈接在當前WebView中打開

 

使用WebChromeClient

WebChromeClient用來處理JavaScript對話框、網站圖標、網站title、加載進度等。

WebChromeClient經常使用方法

1. onCloseWindow,

2. onCreateWindow,

3. onJsAlert,

4. onJsConfirm,

5. onJsPrompt,

6. onProgressChanged,

7. onReceivedIcon,

8. onReceivedTitle,

9. onRequestFocus

 

示例:實現簡單瀏覽網頁的功能

// 點擊返回鍵返回到前一個頁面

if((keyCode==KeyEvent.KEYCODE_BACK) && (mWebView.canGoBack()))

  mWebView.goBack();

// 學習如何處理JavaScript經常使用對話框

WetSettings webSettings = mWebView.getSettings();

webSettings.setJavaScriptEnabled(true);

webSettings.setAllowFileAccess(true);

webSettings.setBuiltInZoomControls(true);

// 設置WebViewClient

mWebView.setWebViewClient(new WebViewClient(){

  public boolean shouldOverrideUrlLoading(WebView view, String url) {

    view.loadUrl(url);

    return true;

  }

  // onPageFinished

  public void onPageFinished(WebView view, String url) {

    super.onPageFinished(view, url);

  }

  // onPageStarted

  public void onPageStarted(WebView view, String url, Bitmap favicon) {

    super.onPageStarted(view, url, favicon);

  }

});

// 設置WebChromeClient

mWebView.setWebChromeClient(new WebChromeClient(){

// 處理JavaScript中的alert

public boolean onJsAlert(WebView view, String url, String msg, fianl JsResult result) {

  // 彈出對話框 builder.show()

  // 肯定

  result.confirm();

  return true;

}

// 處理JavaScript中的confirm

public boolean onJsConfirm(WebView view, String url, String msg, fianl JsResult result) {

  // 彈出對話框 builder.show()

  // 肯定

  result.confirm();

  // 否認

  result.cancel();

  return true;

}

// 處理JavaScript中的prompt

public boolean onJsPrompt(WebView view, String url, String msg, String defaultValue, fianl JsPromptResult result) {

  // 彈出對話框 builder.show()

  // 肯定

  result.confirm(value);

  // 否認/取消

  result.cancel();

  return true;

}

// 處理網頁加載進度條

public void onProgressChanged(WebView view, int newProgress) {

  getWindow().setFeatureInt(Window.FEATURE_PROGRESS, newProgress*100);

  super.onProgressChanged(view, newProgress);

}

// 獲得網頁的標題,設置app的標題title。

public void onReceivedTitle(WebView view, String title) {

  setTitle(title);

  super.onReceivedTitle(view, title);

}

});

// 鏈接按鈕點擊事件處理程序

String url = mUrlBox.getText().toString();

if(URLUtil.isNetworkUrl(url)){

  mWebView.loadUrl(url);

}

// 點擊返回按鍵

public boolean onKeyDown(int keyCode, KeyEvent event) {

  if(keyCode == KeyEvent.KEYCODE_BACK) && mWebView.canGoBack()) {

    mWebView.goBack();

    return true;

  }

  return super.onKeyDown(keyCode, event);

}

 

// 示例代碼:彈出對話框

final View dialogView = mInflater.inflate(R.layout.xxx, null);

Builder builder = new Builder(mContext);

builder.setTitle(「xxx」);

builder.setView(dialogView);

// 確定

builder.setPositiveButton(android.R.string.ok, new AlertDialog.OnclickListener(){

  public void onClick(DialogInterface dialog, int which) {

 

  }

});

// 否認

builder.setNegativeButton(android.R.string.cancel, new AlertDialog.OnclickListener(){

  public void onClick(DialogInterface dialog, int which) {

 

  }

});

// 取消

builder.setOnCancelListener(new AlertDialog.OnCancelListener(){

  public void onClick(DialogInterface dialog, int which) {

 

  }

});

// 不容許取消

builder.setCancelable(false);

builder.create();

builder.show();

return true;