博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android开发系列(二十七):使用ProgressDialog创建进度对话框
阅读量:4649 次
发布时间:2019-06-09

本文共 3362 字,大约阅读时间需要 11 分钟。

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

基本就这两种

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

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线程,来模拟一个耗时的操作

这是效果图:

转载于:https://www.cnblogs.com/wzzkaifa/p/6904917.html

你可能感兴趣的文章
MS-SQL 时间的操作
查看>>
电费的计算:终于明白目录电价是干什么用的了
查看>>
Beta冲刺——星期三
查看>>
上传图片插件鼠标手cursor:pointer;不生效
查看>>
@Controller @RestController
查看>>
JS里脱离文档流
查看>>
规划收发你的邮件,使用qq邮箱接收阿里云企业邮邮件
查看>>
allegro中焊盘的设置
查看>>
Wait Event "Disk file operations I/O"
查看>>
iOS日常工作之常用宏定义大全
查看>>
自学前端的日子,记录我的秃头之旅
查看>>
maven笔记
查看>>
软件需求模式阅读笔记三
查看>>
1、.Net Core 基础
查看>>
解决切换场景时NGUI图集资源未释放的问题
查看>>
蓝桥杯 反置数 数论
查看>>
9.20
查看>>
linux_adduser
查看>>
创建nim+安装vioc分区
查看>>
labjs
查看>>