有时候经常要在手机上浏览网页,今天就写一个在手机上简单地浏览指定网页,当加载网页时以进度条的形式来提示,网页加载完进度条自动取消。
效果图如下:
egomarker.xml 的源码如下:
在这个布局文件里,我只定义了一个WebView组件
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<WebView
android:id="@+id/myWebView"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
/>
</LinearLayout>
接下来是主Activity的源代码:
当加载网页完毕时,取消进度提示框是自定义一个继承自 WebViewClient 这个类,并重写它的 onPageFinished()方法,顾名思义就是网页加载完毕后要执行的动作,这里是直接取消进度提示框。如果访问的页面中有Javascript,则WebView必须设置支持 Javascript,即:webview.getSettings().setJavaScriptEnabled(true); 如果触摸焦点起作用,则要设置 requestFocus(); 假如没设置,则在点击网页文本输入框时,不会弹出软键盘及不响应其他的一些事件。
package com.android.geo;
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.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
public class EgoMarket extends Activity {
private final static int FIRST = 1;
private WebView myWebView; // WebView组件
private ProgressDialog p_dialog;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
this.setContentView(R.layout.geomarket);
// 调用属性方法
findViews();
setWeb();
};
// 加载完毕取消进度条
private class myWebViewClient extends WebViewClient {
@Override
public void onPageFinished(WebView view, String url) {
// TODO Auto-generated method stub
p_dialog.dismiss();
super.onPageFinished(view, url);
}
}
// 取得属性的方法
private void findViews() {
myWebView = (WebView) findViewById(R.id.myWebView);
}
// 当用户在首Activity点击返回键时,提示用户是否退出
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
// TODO Auto-generated method stub
if(keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount()==0)
{
new AlertDialog.Builder(EgoMarket.this)
.setTitle("退出")
.setMessage("您确认要退出吗?")
.setPositiveButton("确认", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
finish();
}
}).setNegativeButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
dialog.dismiss();
}
}).show();
}
return super.onKeyDown(keyCode, event);
}
public void setWeb() {
new Thread(new Runnable() {
public void run() {
Message message = new Message();
message.what = FIRST;
handler.sendMessage(message);
}
}).start();
}
Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case FIRST:
// 创建一个进度条
p_dialog = new ProgressDialog(EgoMarket.this);
// 设置进度条风格,圆形,旋转的
p_dialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
// 设置 ProgressDialog 标题
p_dialog.setTitle("提示");
// 设置 ProgressDialog 图标
p_dialog.setIcon(R.drawable.icon);
// 设置 ProgressDialog 提示信息
p_dialog.setMessage("正在加载中....");
// 设置 ProgressDialog 的进度是否不明确
p_dialog.setIndeterminate(false);
// 设置 ProgressDialog 是否可以按退回按键取消
p_dialog.setCancelable(true);
p_dialog.setButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// 点击确定,取消对话框
dialog.cancel();
finish();
}
});
// 让ProgressDialog显示
p_dialog.show();
String strUrl = "http://www.chinaego.com.cn/cn/index.asp";
// myWebView.loadUrl(strUrl);
WebSettings settings = myWebView.getSettings();
// 设置支持javaScript脚本语言
settings.setJavaScriptEnabled(true);
settings.setSupportZoom(true);
settings.setBuiltInZoomControls(true);
// 这里是支持flash的相关设置
settings.setPluginState(WebSettings.PluginState.ON);
myWebView.loadUrl(strUrl);
myWebView.setWebViewClient(new myWebViewClient());
break;
default: break;
}
super.handleMessage(msg);
}
};
}
最后记得要在 AndroidManifest.xml 添加权限 :
<uses-permission android:name="android.permission.INTERNET" />
否则会出Web page not available错误
这样就可要正确访问你所指定的网页了