android开发中WebView的使用(附完整程序)

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

XML布局:

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

JAVA代码:

package com.pocketdigi.webview; 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 main extends Activity {    /** Called when the activity is first created. */WebView wv;ProgressDialog pd;Handler handler;    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.main);        init();//执行初始化函数        loadurl(wv,"http://www.pocketdigi.com");        handler=new Handler(){        public void handleMessage(Message msg)        {//定义一个Handler,用于处理下载线程与UI间通讯          if (!Thread.currentThread().isInterrupted())          {            switch (msg.what)            {            case 0:            pd.show();//显示进度对话框                    break;            case 1:            pd.hide();//隐藏进度对话框,不可使用dismiss()、cancel(),否则再次调用show()时,显示的对话框小圆圈不会动。            break;            }          }          super.handleMessage(msg);        }        };    }    public void init(){//初始化    wv=(WebView)findViewById(R.id.wv);        wv.getSettings().setJavaScriptEnabled(true);//可用JS        wv.setScrollBarStyle(0);//滚动条风格,为0就是不给滚动条留空间,滚动条覆盖在网页上        wv.setWebViewClient(new WebViewClient(){               public boolean shouldOverrideUrlLoading(final WebView view, final String url) {            loadurl(view,url);//载入网页                return true;               }//重写点击动作,用webview载入         });        wv.setWebChromeClient(new WebChromeClient(){        public void onProgressChanged(WebView view,int progress){//载入进度改变而触发              if(progress==100){            handler.sendEmptyMessage(1);//如果全部载入,隐藏进度对话框            }                   super.onProgressChanged(view, progress);               }           });     pd=new ProgressDialog(main.this);        pd.setProgressStyle(ProgressDialog.STYLE_SPINNER);        pd.setMessage("数据载入中,请稍候!");    }    public boolean onKeyDown(int keyCode, KeyEvent event) {//捕捉返回键        if ((keyCode == KeyEvent.KEYCODE_BACK) && wv.canGoBack()) {               wv.goBack();               return true;           }else if(keyCode == KeyEvent.KEYCODE_BACK){        ConfirmExit();//按了返回键,但已经不能返回,则执行退出确认        return true;         }           return super.onKeyDown(keyCode, event);       }    public void ConfirmExit(){//退出确认    AlertDialog.Builder ad=new AlertDialog.Builder(main.this);    ad.setTitle("退出");    ad.setMessage("是否退出软件?");    ad.setPositiveButton("是", new DialogInterface.OnClickListener() {//退出按钮@Overridepublic void onClick(DialogInterface dialog, int i) {// TODO Auto-generated method stubmain.this.finish();//关闭activity }});    ad.setNegativeButton("否",new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int i) {//不退出不用执行任何操作}});    ad.show();//显示对话框    }    public void loadurl(final WebView view,final String url){    new Thread(){        public void run(){        handler.sendEmptyMessage(0);        view.loadUrl(url);//载入网页        }        }.start();    }  }