WebView允許您爲一個Web頁面創建一個您自己的窗口。今天,我將創建一個簡單的能夠包含一個Web頁面的Activity。
1. 新建一個項目:HelloWebView.
2. 打開res/layout/main.xml。編輯:
<?xml version="1.0" encoding="utf-8"?>
<WebView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:id="@+id/webView"
>
</WebView>
3. 打開HelloWebView.java,並添加內容,如下:
4. 由於要訪問網絡,所以需要在AndroidMainfest.xml添加權限:
<uses-permission android:name="android.permission.INTERNET" />
5. 在AndroidMainfest.xml中設置一下爲沒有標題的界面:
<activity android:name=".HelloWebViewActivity" android:label="@string/app_name"
android:theme="@android:style/Theme.NoTitleBar">
6. 這樣就能運行了,只不過是一個簡單的Web界面。還需要設置些其他的東西,如重寫一個WebViewClient類,這樣這個Activity就能處理自己的URL request了。
7. 在HelloWebViewActivity類中添加下面的內部類
private class HelloWebViewClient extends WebViewClient {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}
}
8. 然後在onCreate(Bundle)方法中添加下面代碼:
mWebView.setWebViewClient(new HelloWebViewClient());
9. 重寫BACK按鍵。
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if ((keyCode == KeyEvent.KEYCODE_BACK) && mWebView.canGoBack()) {
mWebView.goBack();
return true;
}
return super.onKeyDown(keyCode, event);
10.下面運行程序就行了。
運行結果如圖所示:
下面是我參考網上寫的代碼:
package com.covics.zfh;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.ProgressDialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.KeyEvent;
import android.webkit.WebChromeClient;
import android.webkit.WebView;
import android.webkit.WebViewClient;
public class HelloWebViewActivity extends Activity {
public static final int PROGRESS = 0;
public static final int WEBVIEW = 1;
private WebView mWebView;
private Handler mHandler;
private ProgressDialog mProgressDialog;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
init();
loadView(mWebView, "http://write.blog.csdn.net/postlist");
/* 定義一個Handler用於處理下載線程與UI間通訊 */
mHandler = new Handler(){
@Override
public void handleMessage(Message msg) {
if (!Thread.currentThread().isInterrupted()){
switch (msg.what) {
case PROGRESS :
/* 顯示進度條*/
mProgressDialog.show();
break;
case WEBVIEW :
/* 隱藏進度條.注意不用dismiss(),cancel()方法,否則再次調用show()時,進度中的小圓圈將不會轉動 */
mProgressDialog.hide();
break;
default :
break;
}
}
super.handleMessage(msg);
}
};
}
/**
* @description 初始化WebView控件,並初始化ProgressDialog進度條
*
* @throws NullPointerException
*
*/
private void init(){
mWebView = (WebView)findViewById(R.id.webView);
mWebView.getSettings().setJavaScriptEnabled(true);
/* 設置滾動風格,爲0指不給滾動留空間 */
mWebView.setScrollBarStyle(0);
mWebView.setWebViewClient(new WebViewClient(){
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
loadView(view, url); /* 調用loadView()方法 */
return true;
}
});
mWebView.setWebChromeClient(new WebChromeClient(){
@Override
public void onProgressChanged(WebView view, int newProgress) {
if (100 == newProgress){ /* 進度到100時轉到WebView頁面*/
mHandler.sendEmptyMessage(WEBVIEW);
}
super.onProgressChanged(view, newProgress);
}
});
/* 新建一進度條 */
mProgressDialog = new ProgressDialog(HelloWebViewActivity.this);
/* 設置進度條樣式 STYLE_SPINNER是圓形的, STYLE_HORIZONTAL是條開的 */
mProgressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
mProgressDialog.setMessage("loading...");
}
/* 退出軟件 */
private void cofirmExit(){
AlertDialog.Builder builder = new AlertDialog.Builder(HelloWebViewActivity.this);
builder.setTitle("退出軟件")
.setMessage("是否退出軟件?")
.setPositiveButton("是", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
/* 取消進度條,否則關閉軟件時會報錯 */
mProgressDialog.cancel();
/* 調用finish()方法,退出程序 */
HelloWebViewActivity.this.finish();
}
})
.setNegativeButton("否", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
/* 若選擇否則不需要填寫代碼 */
}
}).show(); /* 記得調用show()方法,否則顯示不出來Dialog */
}
/**
*
* @exception 顯示webview頁面.
*
* @author admin
* @param WebView, String
* @throws Exception
*
*/
private void loadView(final WebView webView, final String url){
new Thread(){
@Override
public void run() {
/* 發送一個空消息,用於通知顯示Progress. */
mHandler.sendEmptyMessage(PROGRESS);
/* webView加載頁面 */
webView.loadUrl(url);
super.run();
}
}.start();
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if ((keyCode == KeyEvent.KEYCODE_BACK) && mWebView.canGoBack()) {
/* 用戶按返回鍵,如果可返回則回退 */
System.out.println("test onKeyDown-->1");
mWebView.goBack();
return true;
} else if (keyCode == KeyEvent.KEYCODE_BACK){
/* 用戶按返回鍵,若不可返回時則退出程序 */
System.out.println("test onKeyDown-->2");
cofirmExit();
return true;
}
return super.onKeyDown(keyCode, event);
}
}
結果如下圖所示: