码迷,mamicode.com
首页 > 移动开发 > 详细

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

时间:2014-10-30 17:11:24      阅读:132      评论:0      收藏:0      [点我收藏+]

标签: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>
这里定义了三个按钮,三个按钮对应了相应的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("任务正在执行中,敬请等待...");
		// 设置对话框能用“取消”按钮关闭
		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("耗时任务的完成百分比");
		// 设置对话框不能用“取消”按钮关闭
		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线程,来模拟一个耗时的操作


这是效果图:

bubuko.com,布布扣

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

标签:progressdialog   对话框   进度条   

原文地址:http://blog.csdn.net/u010800530/article/details/40620801

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!