随笔-生活工作点滴

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

2019-07-05  本文已影响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
上一篇下一篇

猜你喜欢

热点阅读