Android中的对话框(二)ProgressDialog

来源:互联网 发布:剑三迪丽热巴捏脸数据 编辑:程序博客网 时间:2024/05/17 04:21

上篇我们详细介绍了AlertDialog 

这次介绍ProgressDialog

ProgressDialog 写了三种形式 

第一种:环形进度条

private ProgressDialog pd1, pd2 ,pd3;
//调用静态方法显示环形进度条pd1 = ProgressDialog.show(ProgressDlgActivity.this, "任务执行中", "任务执行中, 请等待", false, true); new Thread(new Runnable() {     @Override     public void run() {         try {             Thread.sleep(5000);             Log.e("xxxxx", "----> 执行");             pd1.dismiss();         } catch (InterruptedException e) {             e.printStackTrace();         }     } }).start();
注意:这里是调用了静态方法, 我的理解是可以直接用类方法,但是我需要过5秒后暂停, 就用pd1的对象了, 在线程中5秒后执行dismiss()方法把pd1销毁. 效果图如下 :
第二种: 不显示进度的进度条

   pd2 = new ProgressDialog(this);        pd2.setTitle("我是一个进度条");        pd2.setMessage("请稍等");        // 设置对话框可以用取消按钮关闭        pd2.setCancelable(true);        pd2.setButton("取消", new DialogInterface.OnClickListener() {            @Override            public void onClick(DialogInterface dialog, int which) {            }        });        // 设置对话框的进度条风格        <span style="color:#ff6666;">pd2.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);</span>        //设置对话框的进度条是否显示进度        pd2.setIndeterminate(true);        //显示控件        pd2.show();        Timer timer = new Timer();        TimerTask task = new TimerTask() {            @Override            public void run() {                pd2.dismiss();            }        };        //3秒后关闭        timer.schedule(task, 5000);
注意: 这里我们可以看出 设置进度条的重要方法是 getProgressStyle 根据不同的STYLE ,就能选择出系统给出的不同样式,效果图如下:
 
第三种: 显示进度的进度条
第三种进度条, 是要把下载的进度显示出来, 这就需要我们实时更新数据, 开辟子线程,只把值回传.
<span style="font-size:18px;">private int hasData = 0;private int progressStatus = 0;final static int MAX_PROGRESS = 100;private int []data = new int[50];private Handler handler;</span>
<span style="font-size:18px;"></span><pre style="background-color: rgb(255, 255, 255); font-family: Monaco;"><pre name="code" class="java">pd3 = new ProgressDialog(this);        pd3.setTitle("再看这个进度条 , 任务完成百分比");        pd3.setMessage("耗时任务的完成百分比");        //将进度条的完成进度设为0        progressStatus = 0;        hasData = 0;        pd3.setMax(MAX_PROGRESS);        pd3.setCancelable(false);        pd3.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);        pd3.setIndeterminate(false);        pd3.show();

new Thread(new Runnable() {            @Override            public void run() {              while (progressStatus < MAX_PROGRESS){                  progressStatus = MAX_PROGRESS * doWork() /data.length;                  handler.sendEmptyMessage(500);              }                if (progressStatus >= MAX_PROGRESS){                    pd3.dismiss();                }            }        }).start();

 public int doWork(){        data[hasData ++] = (int )(Math.random() * 100);        try {            Thread.sleep(100);        } catch (InterruptedException e) {            e.printStackTrace();        }        return hasData;    }
效果如下 :

我们在alertDialog中发现, 一般用 AlertDiaolg.builder这个类来实现, 实现的方法都大同小异,区别在于:根据不同的提示内容需要, 选择不同的形式, ProgressDialog也是如此, 它的重要方法就是设置style. 
至此 ,常用的两种Dialog就介绍完了, 还有一种简单的日期选择提示框, 用Calendar这个类来实现,有兴趣的朋友可以看一下,非常简单 但界面做的非常好,效果图如下, 点击OK 就能获得选择的年月日,可以放到textView中显示
 
                                             
0 0