Android开发系列(二十七):使用ProgressDialog创建进度对话框

进度对话框在寻常的应用中非经常见,比方下载的时候,打开页面的时候、转移文件等等。有环形的、有长条形的。

基本就这两种

创建进度对话框的两种方式:

1、创建ProgressDialog实例,然后调用ProgressDialog提供的静态show()方法显示实例就可以

2、创建ProgressDialog实例,然后调用方法对进度条进行设置,然后显示出来。


长条形的进度条还分为两种。第一种是显示运行进度,另外一种是不显示运行进度。

在接下来的样例中。我们会看到三种:环形进度条、显示运行进度的长条形进度条、不显示运行进度的长条形进度条


首先,我们创建一个Android项目,然后编写main.xml文件:

<?

xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center_horizontal"> <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:text="环形进度条" android:onClick="showSpinner" /> <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:text="不显示运行进度的进度条" android:onClick="showIndeterminate" /> <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:text="显示运行进度的进度条" android:onClick="showProgress" /> </LinearLayout>

这里定义了三个button。三个button相应了相应的onClick属性


接下来,是ProgressDialogTest.java:

package org.crazyit.ui;

import android.app.Activity;
import android.app.ProgressDialog;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;


public class ProgressDialogTest extends Activity
{
	final static int MAX_PROGRESS = 100;
	// 该程序模拟填充长度为100的数组
	private int[] data = new int[50];
	// 记录进度对话框的完毕百分比
	int progressStatus = 0;
	int hasData = 0;
	ProgressDialog pd1,pd2;
	// 定义一个负责更新的进度的Handler
	Handler handler = new Handler()
	{
		@Override
		public void handleMessage(Message msg)
		{
			// 表明消息是由该程序发送的。
			if (msg.what == 0x123)
			{
				pd2.setProgress(progressStatus);
			}
		}
	};
	@Override
	public void onCreate(Bundle savedInstanceState)
	{
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
	}

	public void showSpinner(View source)
	{
		// 调用静态方法显示环形进度条
		ProgressDialog.show(this, "任务运行中"
			, "任务运行中。请等待", false, true); //①
	}

	public void showIndeterminate(View source)
	{
		pd1 = new ProgressDialog(ProgressDialogTest.this);
		// 设置对话框的标题
		pd1.setTitle("任务正在运行中");
		// 设置对话框显示的内容
		pd1.setMessage("任务正在运行中,敬请等待...");
		// 设置对话框能用“取消”button关闭
		pd1.setCancelable(true);
		// 设置对话框的进度条风格
		pd1.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
		// 设置对话框的进度条是否显示运行进度
		pd1.setIndeterminate(true);
		pd1.show(); //②
	}

	public void showProgress(View source)
	{
		// 将进度条的完毕进度重设为0
		progressStatus = 0;
		// 又一次開始填充数组。

hasData = 0; pd2 = new ProgressDialog(ProgressDialogTest.this); pd2.setMax(MAX_PROGRESS); // 设置对话框的标题 pd2.setTitle("任务完毕百分比"); // 设置对话框 显示的内容 pd2.setMessage("耗时任务的完毕百分比"); // 设置对话框不能用“取消”button关闭 pd2.setCancelable(false); // 设置对话框的进度条风格 pd2.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); // 设置对话框的进度条是否显示运行进度 pd2.setIndeterminate(false); pd2.show(); //③ new Thread() { public void run() { while (progressStatus < MAX_PROGRESS) { // 获取耗时操作的完毕百分比 progressStatus = MAX_PROGRESS * doWork() / data.length; // 发送空消息到Handler handler.sendEmptyMessage(0x123); } // 假设任务已经完毕 if (progressStatus >= MAX_PROGRESS) { // 关闭对话框 pd2.dismiss(); } } }.start(); } // 模拟一个耗时的操作。

public int doWork() { // 为数组元素赋值 data[hasData++] = (int) (Math.random() * 100); try { Thread.sleep(100); } catch (InterruptedException e) { e.printStackTrace(); } return hasData; } }

在进行第三个:显示运行进度的进度条的时候,我们用到了Thread线程,来模拟一个耗时的操作


这是效果图:


posted @ 2017-05-25 17:10  wzzkaifa  阅读(199)  评论(0编辑  收藏  举报