第34讲 UI组件之 ProgressDialog和Message

时间:2021-05-05 20:03:07

34UI组件之 ProgressDialogMessage

1.进度对话框 ProgressDialog

<1>简介

ProgressDialog是AlertDialog类的一个扩展,可以为一个未定义进度的任务显示一个旋转轮形状的进度动画,或者为一个指定进度的任务显示一个进度条。

一个对话框中显示一个进步指标和一个可选的文本信息或一个视图。只有文本信息或一个视图,可以同时使用。

对话框可以按back键取消。

<2>方法

setProgressStyle()

设置进度条风格

setTitle()

设置ProgressDialog 标题

setMessage()

设置ProgressDialog 提示信息

setIcon()

设置ProgressDialog 标题图标

setIndeterminate()

设置ProgressDialog 的进度条是否不明确

setCancelable()

设置ProgressDialog 是否可以按退回按键取消

setButton()

设置ProgressDialog 的一个Button

setProgress()

设置ProgressDialog 进度条进度

show()

显示ProgressDialog

1.弹出一个进度对话框,只有一个无限循环的小圆圈。

public void test1(View view) {

ProgressDialog dialog=new ProgressDialog(this);

dialog.setTitle("标题信息");                                      //设置ProgressDialog标题

dialog.setMessage("正在下载...");                //设置ProgressDialog 提示信息

dialog.show();                                                        //显示ProgressDialog

}

2.弹出一个对话框,显示一个水平进度条

public void test2(View view) {

ProgressDialog dialog=new ProgressDialog(this);

dialog.setTitle("标题信息");                                      //设置ProgressDialog标题

dialog.setMessage("正在下载...");                //设置ProgressDialog 提示信息

dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);   //水平方向的进度条

dialog.setMax(100);                                             //设置长度

dialog.incrementProgressBy(10);                     //指定增加的进度

dialog.show();                                                        //显示ProgressDialog

}

3.将耗时任务与更新UI组件解耦,使用handleMessage方法。

首先需要在UI主线程中定义一个handler,用于接收其他线程中传递过来的message。

private Handler handler=new Handler(newCallback() {

public boolean handleMessage(Message msg) {

/更新UI组件的工作,就放置到这里。

//通过msg可以传递信息,来改变流程的走向。

//同时把不变的代码进行封装,把变化的部分通过参数msg传递。 msg对象需要具有应对所有变化的能力。

ProgressDialog dialog=(ProgressDialog)msg.obj;

dialog.cancel();

if(msg.arg1 == 1){

textView.setText("下载成功!!");

}else{

textView.setText("下载失败!!");

}

return false;

}

});

然后在其他线程中,设置一个message。该msg将其余线程中的dialog传递给了handler接收,从而修改了dialog。

public void test1(View view) {

ProgressDialog dialog=new ProgressDialog(this);

dialog.setTitle("标题信息");                                      //设置ProgressDialog 标题

dialog.setMessage("正在下载...");                //设置ProgressDialog 提示信息

dialog.show();                                                        //显示ProgressDialog

new Thread(new Runable(){

public void run(){

try{

Thread.sleep(6000);

}

catch(InterruptedException e){

e.printStackTrace();

}

Message msg=new Message();

msg.obj=dialog;

msg.arg1 = 1;                              //1 下载成功;

//msg.arg1 = 2;                           //2 下载失败;

handler.sendMessage(msg);

//也可以设置一个flag,传递一些状态信息

}

});

}