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

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

XML布局:

[html] view plaincopy
  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代码:

[java] view plaincopy
  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.    
  108.    
  109. }  
0 0
原创粉丝点击