您的位置:首页 > 移动开发 > Android开发

Android ProgressDialog创建三种简单的进度对话框

2014-09-16 16:23 351 查看
main.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"
    android:orientation="vertical"
    >

    <Button 
        android:id="@+id/bt1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="按钮1"
        />
    <Button 
        android:id="@+id/bt2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="按钮2"
        />
    <Button 
        android:id="@+id/bt3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="按钮3"
        />

</LinearLayout>


ProgressDialogTest.java

package com.example.progressdialog;

import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.app.Activity;
import android.app.ProgressDialog;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

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()
	{
		public void handleMessage(Message msg)
		{
			//表明消息是由该程序发送的
			if(msg.what == 0x123)
			{
				pd2.setProgress(progressStatus);
			}
		}
	};
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		final Button bt1;
		final Button bt2;
		final Button bt3;
		
		bt1 = (Button)findViewById(R.id.bt1);
		bt1 .setOnClickListener(new View.OnClickListener() {
			public void onClick(View v) {
				showSpinner(bt1);
			}
		});
		
		bt2 = (Button)findViewById(R.id.bt2);
		bt2 .setOnClickListener(new View.OnClickListener() {
			public void onClick(View v) {
				showIndeterminate(bt2);
			}
		});
		
		bt3 = (Button)findViewById(R.id.bt3);
		bt3 .setOnClickListener(new View.OnClickListener() {
			public void onClick(View v) {
				showProgress(bt3);
			}
		});
		
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.progress_dialog_test, menu);
		return true;
	}
	
	public void showSpinner(View source)
	{
		//调用静态方法显示环形进度条
		ProgressDialog.show(this, "任务执行中","任务执行中,请等待",false,true);
	}
	
	public void showIndeterminate(View sourse)
	{
		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;
	}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: