ProgressDialog代表了进度对话框,程序只要创建ProgressDialog实例,并将它显示出来就是一个进度对画框。使用ProgressDialog创建进度对话框有如下两种方式。
①如果只是创建简单的对话框,调用ProgressDialog提供的静态show()方法显示对话框即可。
②创建ProgressDialog,然后调用方法对对话框里的进度条进行设置,设置完成后将对话框显示出来即可。
为了对进度对话框里的进度进行设置,ProgressDialog包含了如下常用的方法。
setIndeterminate(boolean indeterminate):设置对话框里的进度条不显示进度值。
setMax(int max):设置对话框里的进度条的最大值。
setMessage(CharSequence message):设置对话框里显示的消息。
setProgress(int value):设置对话框里进度条的进度值。
setProgressStyle(int style):设置对话框里进度条的风格。
下面程序的界面也很简单,界面上只有三个简单的按钮,当用户单击不同按钮时系统将会启动不同的进度对话框。其中第三个按钮激发的进度对话框比较复杂,该对话框使用填充数组来模拟耗时任务,随着任务的进行不断更新进度对话框上进度的显示。
>
/>
后台Activity代码文件如下:
packageorg.crazyit.helloworld;importandroid.os.Bundle;importandroid.os.Handler;importandroid.os.Message;importandroid.app.Activity;importandroid.app.ProgressDialog;importandroid.view.Menu;importandroid.view.View;public class ProgressDialogTest extendsActivity {final static int MAX_PROGRESS=100;//改程序模拟填充长度为100的数组
private int[] data=new int[100];//记录进度对话框的完成百分比
int progressStatus=0;int hasData=0;
ProgressDialog pd1,pd2;//定义一个负责更新的进度的Handler
Handler handler=newHandler()
{public voidhandleMessage(Message msg)
{//表明消息是由该程序发送的
if(msg.what==0x123)
{
pd2.setProgress(progressStatus);
}
}
};
@Overrideprotected voidonCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);
setContentView(R.layout.progress_dialog_test);
}public voidshowSpinner(View source)
{
ProgressDialog.show(this, "任务执行中", "任务执行中,请等待",false,true); //① }public voidshowIndeterminate(View source)
{
pd1=new ProgressDialog(ProgressDialogTest.this);//设置对话框的标题
pd1.setTitle("任务正在执行中");//设置对话框显示的内容
pd1.setMessage("任务正在执行中,敬请等待...");//设置对话框能用“取消”按钮关闭
pd1.setCancelable(true);//设置对话框的进度条风格
pd1.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);//设置对话框的进度条是否显示进度
pd1.setIndeterminate(true);
pd1.show(); //② }public voidshowpProgress(View source)
{//将进度条的完成进度设为0
progressStatus=0;//重新开始填充数组
hasData=0;
pd2=new ProgressDialog(ProgressDialogTest.this);
pd2.setMax(MAX_PROGRESS);//设置对画框的标题
pd2.setTitle("任务完成百分比");//设置对话框显示的内容
pd2.setMessage("耗时任务的完成百分比");//设置不能用“取消”按钮关闭
pd2.setCancelable(false);//设置对话框的进度条风格
pd2.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);//设置对话框的进度条是否显示进度
pd2.setIndeterminate(false);
pd2.show(); //③newThread(){public voidrun()
{while(progressStatus
{//获取耗时操作的完成百分比
progressStatus=MAX_PROGRESS*doWork()/data.length;//发送空消息到Handler
handler.sendEmptyMessage(0x123);
}//如果任务已完成
if(progressStatus>=MAX_PROGRESS)
{//关闭对话框
pd2.dismiss();
}
}
}.start();
}//模拟一个耗时的操作
public intdoWork()
{//为数组元素赋值
data[hasData++]=(int)(Math.random()*100);try{
Thread.sleep(100);
}catch(InterruptedException e)
{
e.printStackTrace();
}returnhasData;
}
@Overridepublic booleanonCreateOptionsMenu(Menu menu) {//Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.progress_dialog_test, menu);return true;
}
}
上面程序为三个按钮定义了事件处理方法,其中一个按钮的事件处理方法调用了ProgressDialog的静态show()方法创建并显示对话框,如上面①号粗体字代码所示,这也是使用对话框的最简单的方式;第二个按钮的事件处理方法先创建了ProgressDialog对象,再调用该对话框的show()方法将它显示出来,如上面的②号粗体字代码所示;第三个按钮的事件处理方法也先创建ProgressDialog对象,并设置对话框的相关属性,再调用show()方法将它显示出来。
运行上面的程序出现如下所示界面效果: