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;
}
进度条风格效果如下:
![](https://img.haomeiwen.com/i18446490/9e5640fb511748a9.jpg)
![](https://img.haomeiwen.com/i18446490/a3c6fe75c4d42ea1.jpg)
网友评论