xml文件
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity"
android:orientation="vertical">
<Button
android:id="@+id/mybut"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:text="点击下载"/>
</LinearLayout>
java文件
package com.example.progressdialog;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.app.Activity;
import android.app.Dialog;
import android.app.ProgressDialog;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
public class MainActivity extends Activity {
final int PROGRESS_DIALOG=0x112;
ProgressDialog pd;
//记录进度对话框的完成百分比
int progressStatus=0;
//该程序模拟填充长度为100的数组
private int[] data=new int[100];
int hasData=0;
Button mybut;
//定义一个负责更新进度的Handler
Handler handler;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mybut=(Button) super.findViewById(R.id.mybut);
//为按钮设置监听
mybut.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
showDialog(PROGRESS_DIALOG);
}
});
handler=new Handler(){
public void handleMessage(Message msg){
//表明消息是由该程序发送的
if(msg.what==0x111){
pd.setProgress(progressStatus);
}
}
};
}
@Override
protected Dialog onCreateDialog(int id, Bundle args) {
switch(id){
case PROGRESS_DIALOG:
//创建进度对话框
pd=new ProgressDialog(MainActivity.this);
pd.setMax(100);
//设置对话框的标题
pd.setTitle("任务完成百分比");
//设置对话框显示的内容
pd.setMessage("耗时任务的完成百分比");
//设置对话框不能"取消"按钮关闭
pd.setCancelable(true);
//设置对话框进度条的风格,圆形进度条
//pd.setProgressStyle(ProgressDialog.STYLE_SPINNER);
//长方形进度条
pd.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
//设置对话框的进度条是否显示进度
pd.setIndeterminate(false);
pd.setIcon(R.drawable.ic_launcher);
break;
}
return pd;
}
/**
* 在对话框被显示之前,Android还会调用onPrepareDialog(int, Dialog). 如果你希望每次显示对话框时有动态更改的内容, 那么就改写这个函数.
*该函数在每次一个对话框打开时都调用. 如果你不定义该函数,则对话框每次打开都是一样的. 该函数也会传入对话框的id以及你在onCreateDialog()中创建的Dialog对象.
*/
//将对话框的进度清零
protected void onPrepareDialog(int id, Dialog dialog) {
super.onPrepareDialog(id, dialog);
switch(id){
case PROGRESS_DIALOG:
//对话框进度清零
pd.incrementProgressBy(-pd.getProgress());
new Thread(){
public void run (){
while(progressStatus<100){
progressStatus=doWork();
//发送消息到Handler
Message m=new Message();
m.what=0x111;
handler.sendMessage(m);
}
//如果任务已经完成
if(progressStatus>=100){
//关闭对话框
pd.dismiss();
}
}
}.start();
pd.show();
break;
}
}
//模拟一个耗时操作
public int doWork(){
//为数组元素赋值
data[hasData]=(int)(Math.random()*100);
hasData++;
try{
Thread.sleep(100);
}
catch(InterruptedException e){
e.printStackTrace();
}
return hasData;
}
}