美文网首页随笔-生活工作点滴
十六、使用ProgressDialog创建进度对话框

十六、使用ProgressDialog创建进度对话框

作者: 清梦星河哈 | 来源:发表于2019-07-05 15:43 被阅读3次

    ProgressDialog本身就代表了进度对话框,程序只要创建ProgressDialog实例并将它显示出来就是一个进度对话框。当然我们也可以设置进度对话框里的进度条方法:
    setIndeterminate(boolean)设置对话框里的进度条不显示进度值
    setMax(int)设置对话框进度条最大值
    setMessage(CharSequence)设置对话框里显示的消息
    setProgress(int)设置进度条的进度值
    setProgressStyle(int)设置对话框里进度条的风格
    代码如下:

        //定义进度对话框的标识
        final int PROGRESS_DIALOG = 0x112;
        //记录进度对话框的完成百分比
        int progressStatus = 0;
        ProgressDialog pd;
        //定义一个负责更新的进度的Handler
        Handler handler;
    
        @SuppressLint("HandlerLeak")
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity8);
            Button button = findViewById(R.id.button);
            button.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    showDialog(PROGRESS_DIALOG);
                }
            });
            handler = new Handler(){
    
                @Override
                public void handleMessage(@NonNull Message msg) {
                    if(msg.what == 0x111){
                        pd.setProgress(progressStatus);
                    }
                    super.handleMessage(msg);
                }
            };
        }
    
        @Override
        protected Dialog onCreateDialog(int id, Bundle args) {
            System.out.println("onCreateDialog");
            switch (id){
                case PROGRESS_DIALOG:
                    //创建进度对话框
                    pd = new ProgressDialog(context);
                    pd.setMax(100);
                    pd.setTitle("任务百分比");
                    pd.setMessage("耗时任务的完成百分比");
                    pd.setCancelable(false);
                    //设置对话框的进度条风格
                    pd.setProgressStyle(ProgressDialog.STYLE_SPINNER);//圆形进度条
                    //pd.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);//长进度条
                    //设置对话框的进度条是否显示
                    pd.setIndeterminate(false);
                    break;
            }
            return pd;
        }
    
        //该方法将在onCreateDialog方法调用后被回调
        @Override
        protected void onPrepareDialog(int id, Dialog dialog) {
            System.out.println("onPrepareDialog");
            super.onPrepareDialog(id, dialog);
            switch (id){
                case PROGRESS_DIALOG:
                    //对话框进度清零
                    pd.incrementProgressBy(-pd.getProgress());
                    progressStatus = 0;
                    new Thread(){
                        @Override
                        public void run() {
                            while (progressStatus < 100){
                                progressStatus = doWork();
                                Message m = new Message();
                                m.what = 0x111;
                                handler.sendMessage(m);
                            }
                            //如果完成任务
                            if(progressStatus >= 100){
                               pd.dismiss();
                            }
                        }
                    }.start();
                    break;
            }
        }
    
        //模拟一个耗时操作
        private int doWork() {
            progressStatus = progressStatus + 1;
            try {
                Thread.sleep(100);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            return progressStatus;
        }
    

    进度条风格效果如下:


    ProgressDialog.jpg ProgressDialog.jpg

    相关文章

      网友评论

        本文标题:十六、使用ProgressDialog创建进度对话框

        本文链接:https://www.haomeiwen.com/subject/dfnshctx.html