android开发中WebView的使用

Posted on 2011-07-26 17:13  codingX  阅读(1539)  评论(0)    收藏  举报

WebView是个好东西,作用相当于一个迷你的浏览器,采用Webkit内核,因此完美支持html,javascript,css等。有时候,我们完 全可以把UI甚至数据处理都交给WebView,配合PHP等服务端程序,这样Android开发就变成了网页开发,可以省很多精力。
下面是一个WebView的简单例子,如果用把所有功能都交给服务端脚本处理,这个程序已经很完整了,你只要写好网页,把URL填上,再编译,就是一个新软件。
程序功能介绍:打开网页同时显示一个ProgressDialog,网页载入完毕则隐藏,点击页面上链接时再次显示ProgressDialog,载入完隐藏,可用返回键返回上一页。
XML布局:

 1 <?xml version="1.0" encoding="UTF-8"?>
2 <AbsoluteLayout android:orientation="vertical" android:id="@+id/tab1" android:layout_width="fill_parent" android:layout_height="fill_parent"
3 xmlns:android="http://schemas.android.com/apk/res/android">
4 <WebView android:id="@+id/wv"
5 android:layout_width="fill_parent"
6 android:layout_height="fill_parent"
7 android:layout_x="0.0dip"
8 android:layout_y="0.0dip"
9 android:layout_weight="1.0" />
10 </AbsoluteLayout>

JAVA代码:

  1 package com.pocketdigi.webview;
2
3 import android.app.Activity;
4 import android.app.AlertDialog;
5 import android.app.ProgressDialog;
6 import android.content.DialogInterface;
7 import android.os.Bundle;
8 import android.os.Handler;
9 import android.os.Message;
10 import android.view.KeyEvent;
11 import android.webkit.WebChromeClient;
12 import android.webkit.WebView;
13 import android.webkit.WebViewClient;
14
15 public class main extends Activity {
16 /** Called when the activity is first created. */
17 WebView wv;
18 ProgressDialog pd;
19 Handler handler;
20 @Override
21 public void onCreate(Bundle savedInstanceState) {
22 super.onCreate(savedInstanceState);
23 setContentView(R.layout.main);
24 init();//执行初始化函数
25 loadurl(wv,"http://www.pocketdigi.com");
26 handler=new Handler(){
27 public void handleMessage(Message msg)
28 {//定义一个Handler,用于处理下载线程与UI间通讯
29 if (!Thread.currentThread().isInterrupted())
30 {
31 switch (msg.what)
32 {
33 case 0:
34 pd.show();//显示进度对话框
35 break;
36 case 1:
37 pd.hide();//隐藏进度对话框,不可使用dismiss()、cancel(),否则再次调用show()时,显示的对话框小圆圈不会动。
38 break;
39 }
40 }
41 super.handleMessage(msg);
42 }
43 };
44 }
45 public void init(){//初始化
46 wv=(WebView)findViewById(R.id.wv);
47 wv.getSettings().setJavaScriptEnabled(true);//可用JS
48 wv.setScrollBarStyle(0);//滚动条风格,为0就是不给滚动条留空间,滚动条覆盖在网页上
49 wv.setWebViewClient(new WebViewClient(){
50 public boolean shouldOverrideUrlLoading(final WebView view, final String url) {
51 loadurl(view,url);//载入网页
52 return true;
53 }//重写点击动作,用webview载入
54
55 });
56 wv.setWebChromeClient(new WebChromeClient(){
57 public void onProgressChanged(WebView view,int progress){//载入进度改变而触发
58 if(progress==100){
59 handler.sendEmptyMessage(1);//如果全部载入,隐藏进度对话框
60 }
61 super.onProgressChanged(view, progress);
62 }
63 });
64
65 pd=new ProgressDialog(main.this);
66 pd.setProgressStyle(ProgressDialog.STYLE_SPINNER);
67 pd.setMessage("数据载入中,请稍候!");
68 }
69 public boolean onKeyDown(int keyCode, KeyEvent event) {//捕捉返回键
70 if ((keyCode == KeyEvent.KEYCODE_BACK) && wv.canGoBack()) {
71 wv.goBack();
72 return true;
73 }else if(keyCode == KeyEvent.KEYCODE_BACK){
74 ConfirmExit();//按了返回键,但已经不能返回,则执行退出确认
75 return true;
76 }
77 return super.onKeyDown(keyCode, event);
78 }
79 public void ConfirmExit(){//退出确认
80 AlertDialog.Builder ad=new AlertDialog.Builder(main.this);
81 ad.setTitle("退出");
82 ad.setMessage("是否退出软件?");
83 ad.setPositiveButton("是", new DialogInterface.OnClickListener() {//退出按钮
84 @Override
85 public void onClick(DialogInterface dialog, int i) {
86 // TODO Auto-generated method stub
87 main.this.finish();//关闭activity
88
89 }
90 });
91 ad.setNegativeButton("否",new DialogInterface.OnClickListener() {
92 @Override
93 public void onClick(DialogInterface dialog, int i) {
94 //不退出不用执行任何操作
95 }
96 });
97 ad.show();//显示对话框
98 }
99 public void loadurl(final WebView view,final String url){
100 new Thread(){
101 public void run(){
102 handler.sendEmptyMessage(0);
103 view.loadUrl(url);//载入网页
104 }
105 }.start();
106 }
107 }

博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3