Android对话框之ProgressDialog(进度对话框)

ProgressDialog 的两种用法:

1.直接调用:

class SpinnerProgress implements OnClickListener{  
        public void onClick(View view) {  
            //创建ProgressDialog对象  
            progressDialog = new ProgressDialog(  
                ProgressDialogActivity.this);  
            //设置进度条风格,风格为圆形,旋转的  
            progressDialog.setProgressStyle(  
                ProgressDialog.STYLE_SPINNER);  
            //设置ProgressDialog 标题  
            progressDialog.setTitle("下载");  
            //设置ProgressDialog 提示信息  
            progressDialog.setMessage("这是一个圆形进度条对话框");  
            //设置ProgressDialog 标题图标  
            progressDialog.setIcon(android.R.drawable.btn_star);  
            //设置ProgressDialog 的进度条是否不明确  
            progressDialog.setIndeterminate(false);  
            //设置ProgressDialog 是否可以按退回按键取消  
            progressDialog.setCancelable(true);  
            //设置取消按钮  
            progressDialog.setButton("取消",   
                new ProgressDialogButtonListener());  
            // 让ProgressDialog显示  
            progressDialog.show();  
        }  
    }  

2.通过重写Activity的public Dialog onCreateDialog(int id, Bundle status){}和public void onPrepareDialog(int id, Dialog dialog){}

代码如下:

public class ProgressDialogTest extends Activity
{
	// 该程序模拟填充长度为100的数组
	private int[] data = new int[100];
	int hasData = 0;
	// 定义进度对话框的标识
	final int PROGRESS_DIALOG = 0x112;
	// 记录进度对话框的完成百分比
	int progressStatus = 0;
	ProgressDialog pd;
	// 定义一个负责更新的进度的Handler
	Handler handler;

	@Override
	public void onCreate(Bundle savedInstanceState)
	{
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		Button execBn = (Button) findViewById(R.id.exec);
		execBn.setOnClickListener(new OnClickListener()
		{
			@Override
			public void onClick(View source)
			{
				showDialog(PROGRESS_DIALOG);
			}
		});
		handler = new Handler()
		{
			@Override
			public void handleMessage(Message msg)
			{
				// 表明消息是由该程序发送的。
				if (msg.what == 0x111)
				{
					pd.setProgress(progressStatus);
				}
			}
		};
	}

	@Override
	public Dialog onCreateDialog(int id, Bundle status)
	{
		System.out.println("------create------");
		switch (id)
		{
			case PROGRESS_DIALOG:
				// 创建进度对话框
				pd = new ProgressDialog(this);
				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
	public void onPrepareDialog(int id, Dialog dialog)
	{
		System.out.println("------prepare------");
		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();
				break;
		}
	}

	// 模拟一个耗时的操作。
	public int doWork()
	{
		// 为数组元素赋值
		data[hasData++] = (int) (Math.random() * 100);
		try
		{
			Thread.sleep(100);
		}
		catch (InterruptedException e)
		{
			e.printStackTrace();
		}
		return hasData;
	}
}




  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值