package com.crazyit.ui.dialogdemo;
import android.app.Activity;
import android.app.ProgressDialog;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;
/**
* 使用 ProgerssDialog 创建进度对话框
*/
public class ProgerssDialogActivity extends Activity {
public static final int MAX_PROGRSS = 100;
//定义一个 100长度的 数组
private int[] data = new int[50];
//记录对话框的完成百分比
public static int progressStatus = 0;
int i = 0;
public static ProgressDialog pd1, pd2;
//定义一个负责更新的进度的 Handler
private static Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
//发送消息
if(msg.what==0x123){
pd2.setProgress(progressStatus);
}
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_progerss_dialog);
}
//环形进度条
public void showSpinner(View view) {
//调用静态方法显示环形进度条
ProgressDialog.show(this, "任务进行中", "请等待...", false, true);
}
//不显示进度的进度条
public void showIndeterminate(View view) {
pd1 = new ProgressDialog(ProgerssDialogActivity.this);
//
pd1.setTitle("请稍候.."); //设置标题
pd1.setMessage("玩命加载中..."); //设置对话框显示的内容
pd1.setCancelable(true); //设置对话框能用 取消 按钮关闭
//设置对话框进度条风格
pd1.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
pd1.setIndeterminate(true); //设置对话框是否显示 进度
//将对话框显示出来
pd1.show();
}
//显示对话框
public void showProgress(View view) {
//将进度条的完成进度重新设置成 0
progressStatus = 0;
i = 0; //重新开始填充数组
pd2 = new ProgressDialog(ProgerssDialogActivity.this);
pd2.setMax(100); //设置最大值
pd2.setTitle("任务完成百分比"); //设置对话框标题
pd2.setMessage("模拟耗时操作任务的百分比");
//设置对话框不能用 "取消" 按钮关闭
pd2.setCancelable(false);
// 设置对话框的进度条的 风格样式
pd2.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
//设置对话框是否显示 进度条
pd2.setIndeterminate(false);
pd2.show();
//开启一个子线程,模拟耗时操作
new Thread(new Runnable() {
@Override
public void run() {
while (progressStatus < MAX_PROGRSS) {
//获取耗时操作的完成百分比
progressStatus = MAX_PROGRSS * doWork() / data.length;
//发送空消息到 handler
handler.sendEmptyMessage(0x123);
}
//如果任务完成
if (progressStatus >= MAX_PROGRSS) {
//就关闭对话框
pd2.dismiss();
}
}
}).start();
}
//模拟一个耗时操作
private int doWork() {
//为数组元素赋值
data[i++] = (int) (Math.random() * 100);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
return i;
}
}
布局界面
<?xml version="1.0" encoding="utf-8"?>
<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:layout_gravity="center_horizontal"
android:orientation="vertical"
tools:context="com.crazyit.ui.dialogdemo.ProgerssDialogActivity">
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:onClick="showSpinner"
android:text="环形进度条" />
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:onClick="showIndeterminate"
android:text="不显示进度的进度条" />
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:onClick="showProgress"
android:text="显示进度的进度条" />
</LinearLayout>
上面的项目中 共是3种 ProgressDialog
第一种 是显示ProgressDialog 最简单的 方法
第二种是 创建了 ProgressDialog 对象,再调用 show( ) 方法显示出来
第三种是 模拟了一个耗时操作 并设置 ProgressDialog 的相关属性,再调用 show( ) 方法显示出来
本文介绍如何在Android应用中使用ProgressDialog来显示不同类型的进度提示。通过三种不同的示例,展示了ProgressDialog的基本用法、定制显示内容及结合后台线程更新进度条的方法。
4864

被折叠的 条评论
为什么被折叠?



