ProgressDialog讲解

来源:互联网 发布:平舆在线软件下载 编辑:程序博客网 时间:2024/06/08 16:44

一、ProgressDialog的创建方式

ProgressDialog 继承自AlertDialog,AlertDialog继承自Dialog,实现DialogInterface接口。

ProgressDialog的创建方式有两种,一种是new Dialog ,一种是调用Dialog的静态方法Dialog.show()。

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

二、ProgressDialog样式

1. 圆形进度条

代码如下:

 ProgressDialog dialog = new ProgressDialog(this); dialog.setTitle("提示:"); // 设置提示的title的图标,默认是没有的,如果没有设置title的话只设置Icon是不会显示图标的 dialog.setIcon(R.drawable.ic_launcher); dialog.setCanceledOnTouchOutside(false);// 设置在点击Dialog外是否取消Dialog进度条 dialog.setCancelable(true);// 设置是否可以通过点击Back键取消 dialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);// 设置进度条的形式为圆形转动的进度条 // dismiss监听 dialog.setOnDismissListener(new DialogInterface.OnDismissListener() {     @Override     public void onDismiss(DialogInterface dialog) {         Log.e("TAG", "对话框解除了");     } }); // 监听Key事件被传递给dialog dialog.setOnKeyListener(new DialogInterface.OnKeyListener() {     @Override     public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) {         return false;     }});// 监听cancel事件dialog.setOnCancelListener(new DialogInterface.OnCancelListener() {     @Override     public void onCancel(DialogInterface dialog) {     } });// 设置可点击的按钮,最多有三个(默认情况下) dialog.setButton(DialogInterface.BUTTON_POSITIVE, "确定",          new DialogInterface.OnClickListener() {              @Override              public void onClick(DialogInterface dialog, int which) {                  // cancel和dismiss方法本质都是一样的,都是从屏幕中删除Dialog,唯一的区别是                  // 调用cancel方法会回调DialogInterface.OnCancelListener如果注册的话,dismiss                  // 方法不会回调                  dialog.cancel();                  // dialog.dismiss();              }          });  dialog.setButton(DialogInterface.BUTTON_NEGATIVE, "取消",          new DialogInterface.OnClickListener() {              @Override              public void onClick(DialogInterface dialog, int which) {              }          });  dialog.setButton(DialogInterface.BUTTON_NEUTRAL, "查看详情",          new DialogInterface.OnClickListener() {              @Override              public void onClick(DialogInterface dialog, int which) {              }          });  dialog.setMessage("这是一个圆形进度条,确定关闭吗?");  dialog.show();

效果图如下:

这里写图片描述

2. 水平进度条

代码如下:

 final ProgressDialog dialog = new ProgressDialog(this); dialog.setTitle("提示:"); // 设置提示的title的图标,默认是没有的,如果没有设置title的话只设置Icon是不会显示图标的 dialog.setIcon(R.drawable.ic_launcher); dialog.setCanceledOnTouchOutside(false);// 设置在点击Dialog外是否取消Dialog进度条 dialog.setCancelable(true);// 设置是否可以通过点击Back键取消 dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);// 设置进度条的形式为水平进度条 dialog.setMax(100); // dismiss监听 dialog.setOnDismissListener(new DialogInterface.OnDismissListener() {      @Override      public void onDismiss(DialogInterface dialog) {          Log.e("TAG", "对话框解除了");      }  }); // 监听Key事件被传递给dialog dialog.setOnKeyListener(new DialogInterface.OnKeyListener() {       @Override       public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) {           return false;       }  }); // 监听cancel事件 dialog.setOnCancelListener(new DialogInterface.OnCancelListener() {       @Override       public void onCancel(DialogInterface dialog) {       }  }); // 设置可点击的按钮,最多有三个(默认情况下) dialog.setButton(DialogInterface.BUTTON_POSITIVE, "确定",       new DialogInterface.OnClickListener() {            @Override            public void onClick(DialogInterface dialog, int which) {                // cancel和dismiss方法本质都是一样的,都是从屏幕中删除Dialog,唯一的区别是                // 调用cancel方法会回调DialogInterface.OnCancelListener如果注册的话,dismiss                // 方法不会回调                                dialog.cancel();                // dialog.dismiss();            }         }); dialog.setButton(DialogInterface.BUTTON_NEGATIVE, "取消",       new DialogInterface.OnClickListener() {             @Override             public void onClick(DialogInterface dialog, int which) {             }         }); dialog.setButton(DialogInterface.BUTTON_NEUTRAL, "查看详情",       new DialogInterface.OnClickListener() {             @Override             public void onClick(DialogInterface dialog, int which) {             }         }); dialog.setMessage("这是一个水平进度条,确定关闭吗?"); dialog.show(); // 子线程执行耗时操作 new Thread(new Runnable() {     @Override     public void run() {         // TODO Auto-generated method stub         int i = 0;         while (i < 100) {             try {                 Thread.sleep(200);                 // 更新进度条的进度,可以在子线程中更新进度条进度                 dialog.incrementProgressBy(1);                 // dialog.incrementSecondaryProgressBy(10)//二级进度条更新方式                 i++;             } catch (Exception e) {                 // TODO: handle exception             }         }         // 在进度条走完时删除Dialog         dialog.dismiss();     } }).start();

效果图如下:

这里写图片描述

最后,关于自定义ProgressDialog的使用,可参考以下博客:
http://blog.csdn.net/allen315410/article/details/41699063
http://blog.csdn.net/luhuajcdd/article/details/8986212
http://blog.csdn.net/vrix/article/details/43486973

0 0