Android開發系列(二十七):使用ProgressDialog創建進度對話框

進度對話框在平常的應用中很常見,比如下載的時候,打開頁面的時候、轉移文件等等。有環形的、有長條形的。基本就這兩種

創建進度對話框的兩種方式:

1、創建ProgressDialog實例,然後調用ProgressDialog提供的靜態show()方法顯示實例即可

2、創建ProgressDialog實例,然後調用方法對進度條進行設置,然後顯示出來。

 

長條形的進度條還分為兩種,第一種是顯示進度,第二種是不顯示進度。

在接下來的例子中,我們會看到三種:環形進度條、顯示進度的長條形進度條、不顯示進度的長條形進度條

 

首先,我們創建一個Android項目,然後編寫main.xml文件:

 

這裡定義瞭三個按鈕,三個按鈕對應瞭相應的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線程,來模擬一個耗時的操作

 

 

這是效果圖:

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。