android.webkit.WebView/WebViewClient/WebChromeClient


使用android.webkit.WebView控件

在xml布局文件中定義

<WebView

  android:id=”@+id/webkit01”

  android:layout:width=”fill_parent”

  android:layout:height=”fill_parent”

  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;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM