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);
}
}
结果如下图所示: