zoukankan      html  css  js  c++  java
  • (转)android开发中WebView的使用(附完整程序)

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

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    
    <?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代码:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    
    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();
        }
     
     
    }

    © 2011, 冰冻鱼. 请尊重作者劳动成果,复制转载保留本站链接! 应用开发笔记

  • 相关阅读:
    垂死挣扎还是涅槃重生 -- Delphi XE5 公布会归来感想
    自考感悟,话谈备忘录模式
    [每日一题] OCP1z0-047 :2013-07-26 alter table set unused之后各种情况处理
    Java实现 蓝桥杯 算法提高 p1001
    Java实现 蓝桥杯 算法提高 拿糖果
    Java实现 蓝桥杯 算法提高 拿糖果
    Java实现 蓝桥杯 算法提高 求arccos值
    Java实现 蓝桥杯 算法提高 求arccos值
    Java实现 蓝桥杯 算法提高 因式分解
    Java实现 蓝桥杯 算法提高 因式分解
  • 原文地址:https://www.cnblogs.com/greywolf/p/2947304.html
Copyright © 2011-2022 走看看