注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

鑫淼梦园的博客

圆你的梦想 从这里开始

 
 
 

日志

 
 

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

2013-10-20 19:05:21|  分类: delphi xe5 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

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

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() {//退出按钮
   @Override
   public void onClick(DialogInterface dialog, int i) {
    // TODO Auto-generated method stub
    main.this.finish();//关闭activity
 
   }
  });
     ad.setNegativeButton("否",new DialogInterface.OnClickListener() {
   @Override
   public 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();
    }
 
 

  评论这张
 
阅读(386)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017