进度对话框在平常的应用中很常见,比如下载的时候,打开页面的时候、转移文件等等。有环形的、有长条形的。基本就这两种
创建进度对话框的两种方式:
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线程,来模拟一个耗时的操作
这是效果图:
时间: 2024-10-06 07:47:11