Android中ProgressDialog的简单使用.

关于Android中ProgressDialog的简单使用可以看这里
Android中ProgressDialog的应用
Android之ProgressDialog的使用

关于Android ProgressBar & ProgressDialog 的详解可以看这里的讲解
【详解】Android ProgressBar ProgressDialog 进度条 进度条对话框
关于ProgressBar与ProgressDialog的区别可以看这里的解释
ProgressBar与ProgressDialog的区别
ProgressDialog 和 ProgressBar 个人使用
android中ProgressDialog与ProgressBar的使用详解

ProgressDialog类似于ProgressBar类,用于显示一个过程,通常用于耗时操作。
ProgressDialog有这样几个方法介绍:
1.setMax()设置对话框中进度条的最大值。
2.setTile()设置标题。
3.setProgressStyle()设置对话框中进度条的样式。例如:环形和水平。
参数:
ProgressDialog.STYLE_SPINNER 环形精度条
ProgressDialog.STYLE_HORIZONTAL 水平样式的进度条
4.setMessage()设置显示的内容。
一个简单的ProgressDialog的使用
首先是布局文件,
activity.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity"
    android:orientation="vertical"
    >
   <Button
       android:id="@+id/btn"
       android:layout_width="match_parent"
       android:layout_height="wrap_content" />
</LinearLayout>

MainActivity中代码

 public void onClick(View v)
         {
             final ProgressDialog proDialog = android.app.ProgressDialog.show(MainActivity.this, "测试", "3秒后自动消失!");
             Thread thread = new Thread()
             {
                 public void run()
                 {
                     try
                     {
                         sleep(3000);
                     } catch (InterruptedException e)
                     {
                         // TODO 自动生成的 catch 块
                         e.printStackTrace();
                     }
                     proDialog.dismiss();//万万不可少这句,否则会程序会卡死。
                 }
             };
             thread.start();

         }
     };

圆形进度条的实现.

public void onClick(View view) {
                final ProgressDialog dialog = new ProgressDialog(MainActivity.this);
                dialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);// 设置进度条的形式为圆形转动的进度条
                dialog.setCancelable(true);// 设置是否可以通过点击Back键取消
                dialog.setCanceledOnTouchOutside(false);// 设置在点击Dialog外是否取消Dialog进度条
                // 设置提示的title的图标,默认是没有的,如果没有设置title的话只设置Icon是不会显示图标的
                dialog.setTitle("提示");
                // dismiss监听
                dialog.setOnDismissListener(new DialogInterface.OnDismissListener() {

                    @Override
                    public void onDismiss(DialogInterface dialog) {
                        // TODO Auto-generated method stub

                    }
                });
                // 监听Key事件被传递给dialog
                dialog.setOnKeyListener(new DialogInterface.OnKeyListener() {

                    @Override
                    public boolean onKey(DialogInterface dialog, int keyCode,
                                         KeyEvent event) {
                        // TODO Auto-generated method stub
                        return false;
                    }
                });
                // 监听cancel事件
                dialog.setOnCancelListener(new DialogInterface.OnCancelListener() {

                    @Override
                    public void onCancel(DialogInterface dialog) {
                        // TODO Auto-generated method stub

                    }
                });
                //设置可点击的按钮,最多有三个(默认情况下)
                dialog.setButton(DialogInterface.BUTTON_POSITIVE, "确定",
                        new DialogInterface.OnClickListener() {

                            @Override
                            public void onClick(DialogInterface dialog, int which) {
                                // TODO Auto-generated method stub

                            }
                        });
                dialog.setButton(DialogInterface.BUTTON_NEGATIVE, "取消",
                        new DialogInterface.OnClickListener() {

                            @Override
                            public void onClick(DialogInterface dialog, int which) {
                                // TODO Auto-generated method stub

                            }
                        });
                dialog.setButton(DialogInterface.BUTTON_NEUTRAL, "中立",
                        new DialogInterface.OnClickListener() {

                            @Override
                            public void onClick(DialogInterface dialog, int which) {
                                // TODO Auto-generated method stub

                            }
                        });
                dialog.setMessage("这是一个圆形进度条");
                dialog.show();
                Thread thread = new Thread()
                {
                    public void run()
                    {
                        try
                        {
                            sleep(2000);
                        } catch (InterruptedException e)
                        {
                            // TODO 自动生成的 catch 块
                            e.printStackTrace();
                        }
                        // cancel和dismiss方法本质都是一样的,都是从屏幕中删除Dialog,唯一的区别是
                        // 调用cancel方法会回调DialogInterface.OnCancelListener如果注册的话,dismiss方法不会回掉
                        dialog.cancel();
//                        dialog.dismiss();
                    }
                };
                thread.start();
            }

水平进度条.

final ProgressDialog dialog = new ProgressDialog(MainActivity.this);
                dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);// 设置水平进度条
                dialog.setCancelable(true);// 设置是否可以通过点击Back键取消
                dialog.setCanceledOnTouchOutside(false);// 设置在点击Dialog外是否取消Dialog进度条
                dialog.setIcon(R.mipmap.ic_launcher);// 设置提示的title的图标,默认是没有的
                dialog.setTitle("提示");
                dialog.setMax(100);
                dialog.setButton(DialogInterface.BUTTON_POSITIVE, "确定",
                        new DialogInterface.OnClickListener() {

                            @Override
                            public void onClick(DialogInterface dialog, int which) {
                                // TODO Auto-generated method stub

                            }
                        });
                dialog.setButton(DialogInterface.BUTTON_NEGATIVE, "取消",
                        new DialogInterface.OnClickListener() {

                            @Override
                            public void onClick(DialogInterface dialog, int which) {
                                // TODO Auto-generated method stub

                            }
                        });
                dialog.setButton(DialogInterface.BUTTON_NEUTRAL, "保持",
                        new DialogInterface.OnClickListener() {

                            @Override
                            public void onClick(DialogInterface dialog, int which) {
                                // TODO Auto-generated method stub

                            }
                        });
                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();

i效果如图
图片

关于Unable to add window – token null is not for an application 的错误
最近在写到ProgressDialog的时候 报错:
android.view.WindowManager$BadTokenException: Unable to add window – token null is not for an application。

ProgressDialog progressDialog=new ProgressDialog(context);
此处的context 要保证你的上下文要为activity对象,只有activity才能添加ProgressDialog窗体,
为了确保正确,context可以使用activity.this表示,不要一味地写成getApplicationContext()

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值