• (转)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, 冰冻鱼. 请尊重作者劳动成果,复制转载保留本站链接! 应用开发笔记

  • 相关阅读:
    【数据结构】Trie(字典树、前缀树)
    【数据结构】优先队列
    【数据结构】堆
    【数据结构】二分搜索树
    【数据结构】哈希表
    【数据结构】链表
    【数据结构】队列
    Python项目案例开发从入门到实战
    Matlab
    Matlab
  • 原文地址:https://www.cnblogs.com/greywolf/p/2947304.html
Copyright © 2020-2023  润新知