Android WebView的使用 (瀏覽網頁)

  Android

來源: http://fecbob.pixnet.net/blog/post/35642367-android-webview%E7%9A%84%E4%BD%BF%E7%94%A8%E3%80%80%E7%80%8F%E8%A6%BD%E7%B6%B2%E9%A0%81

 

* 通過WebSettings設置WebView的一些屬性、狀態。通過webView.getSettings獲得
例如:setAllowFileAccess(是否能訪問檔資料)
setBuiltInZoomControls(設置是否支援縮放)、
setCacheMode(設置緩衝的模式)
setJavaScriptEnabled(設置是否支援JavaScript)……..

 

* 通過WebViewClient來自訂網頁流覽程式。專門輔助WebView處理各種通知、請求等事件的類。 通過webView.setWebChromeClient獲得
方法:
doUpdateVisitedHistory (更新歷史記錄)
onFormResubmission(應用程式重新請求網頁數據)
onLoadResource(載入指定位址提供的資源)
onPageFinished(網頁載入完畢)
onPageStarted(網頁開始載入)
onReceivedError(報告錯誤資訊)
onScaleChanged(WebView發生改變)
shouldOverrideUrlLoading(控制新的連接在當前WebView中打開)

 

* WebChromeClient專門用來輔助WebView處理JavaScript的對話方塊、圖示、網站標題、載入進度等。
方法:onCloseWindow(關閉WebView)
onCreateWindow(創建WebView)
onJsAlert(處理Js中的Alert對話方塊)、onJsConfirm(處理Js中的Confirm對話方塊)、onJsPrompt(處理JS中的Prompt對話方塊)
onProgressChanged(載入進度條改變)
onReceivedIcon(網頁圖示更改)
onReceivedTitle(網頁標題更改)
onRequestFocus(WebView顯示焦距)

 

package com.dan;

 

import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.view.View;
import android.view.Window;
import android.webkit.JsPromptResult;
import android.webkit.JsResult;
import android.webkit.URLUtil;
import android.webkit.WebChromeClient;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Button;
import android.widget.EditText;

 

public class WebActivity extends Activity {

 

private WebView webView;
private EditText urlEdt;
private Button btn;

 

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.web);

 

urlEdt = (EditText)findViewById(R.id.edt_1);
btn = (Button)findViewById(R.id.btn_1);

 

webView = (WebView)findViewById(R.id.web);
WebSettings settings = webView.getSettings();
//webView.loadUrl(“http://10.0.2.2/affiliate/code/login.php”);
//設置支援Js腳本
settings.setJavaScriptEnabled(true);
//設置可以訪問檔
settings.setAllowFileAccess(true);
//支援縮放
settings.setBuiltInZoomControls(true);
//設置WebViewClient
webView.setWebViewClient(new WebViewClient(){
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}

 

@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
}

 

@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
super.onPageStarted(view, url, favicon);
}

 

});
//設置WebChromeClient
webView.setWebChromeClient(new WebChromeClient(){

 

@Override
public boolean onJsAlert(WebView view, String url, String message,
JsResult result) {
AlertDialog.Builder alert = new AlertDialog.Builder(WebActivity.this);
alert.setTitle(“提示對話方塊”);
alert.setMessage(message).setPositiveButton(“確定”, new OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
}
});
alert.create().show();
return true;
}

 

@Override
public boolean onJsConfirm(WebView view, String url,
String message, JsResult result) {
return super.onJsConfirm(view, url, message, result);
}

 

@Override
public boolean onJsPrompt(WebView view, String url, String message,
String defaultValue, JsPromptResult result) {
return super.onJsPrompt(view, url, message, defaultValue, result);
}

 

@Override
public void onProgressChanged(WebView view, int newProgress) {
WebActivity.this.getWindow().setFeatureInt(Window.FEATURE_PROGRESS, newProgress*100);
super.onProgressChanged(view, newProgress);
}

 

@Override
public void onReceivedTitle(WebView view, String title) {
WebActivity.this.setTitle(“中國世貿通加盟管理登錄頁”);
super.onReceivedTitle(view, title);
}

 

});

 

btn.setOnClickListener(new Button.OnClickListener(){
public void onClick(View v) {
String url = urlEdt.getText().toString();
if( URLUtil.isNetworkUrl(url) ){
webView.loadUrl(url);
}else{
urlEdt.setHint(“輸入的網址錯誤,請重新輸入”);
}

 

}
});

 

}

 

}
* 後退 和 前進 canGoBack 與canGoForward
//後退
if( (keyCode == KeyEvent.KEYCODE_BACK) && webView.canGoBack() ){
webView.goBack();
return true;
}

 

將Html代碼通過String的形式被載入到WebView中,而且在Html中可以引用存儲在設備中的圖片資源等。這個方式可以非常方便的實現RichTextField的效果,尤其是對某些程式提供一些本地的簡單文檔時,非常方便。

 

下邊是實現這個功能的原始程式碼:

 

public void loadHTML() { final String mimeType = “text/html”; final String encoding = “utf-8”; final String html = “<h1>Header</h1><p>Custom HTML</p> <p><img src=\”file:///android_asset/image1.jpg\” /> </p>”; WebView wv = (WebView) findViewById(R.id.wv1); wv.loadDataWithBaseURL(“fake://not/needed”, html, mimeType, encoding, “”); } //wView.loadUrl(“file:///android_asset/index.html”); —–打開本包內asset目錄下的index.html檔 //wView.loadUrl(“content://com.android.htmlfileprovider/sdcard/index.html”); —–打開本地sd卡內的index.html檔 //wView.loadUrl(“http://wap.baidu.com”); —–打開指定URL的html檔 ……webView.setInitialScale(30); //這個就是重點,你可以在這裡根據需求來設置縮放比例