在此前的几个教程中引出过一些Dialog的使用方法,可从来没有系统全面的介绍Android平台上所有Dialog家族成员的情况(其实官方文档有相当明确的说明:参考1、参考2)。对于大部分人可以直接根据官方文档获得有关Dialog的使用方法,AR给出的有关Dialog参考教程可以作为额外的补充。
在这里为大家介绍ProgressDialog的使用方法:
1) 创建一个普通ProgressDialog(不带有ProgressBar)所必须的几个参数
Context: 指定当前Dialog的Container
Title:对话框标题
Message:对话框主体所显示的信息
Indeterminate:不确定性属性,这个属性对于ProgressDailog默认的转轮模式没有实际意义,默认下设置为true,它仅仅对带有ProgressBar的Dialog有作用。
2)以下两个为可选参数
Cancelable:增加一个可以Cancel当前Dialog的按钮,强制退出。
CancelListner:当前Dialog强制取消之后将会被执行,通常用来清理未完成的任务。
快速创建一个ProgressDialog的方法(代码片段):
01 private ProgressDialog dialog;
02 private Handler handler = new Handler() {
03 public void handleMessage(Message msg)
04 {
05 dialog.dismiss();
06 }
07 };
08 private Thread checkUpdate = new Thread()
09 {
10 public void run() {
11 try {
12 sleep(3000);
13 } catch (InterruptedException e) {
14 // TODO Auto-generated catch block
15 e.printStackTrace();
16 }
17 handler.sendEmptyMessage(0);
18 }
19 };
20 @Override
21 public void onCreate(<A title=Bundle href="http://developer.android.com/reference/android/os/Bundle.html" target=_blank>Bundle</A> savedInstanceState) {
22 super.onCreate(savedInstanceState);
23 setContentView(R.layout.main);
24 final Button button = (Button) findViewById(R.id.Compute);
25 button.setOnClickListener(new View.OnClickListener()
26 {
27 public void onClick(View arg0) {
28 // TODO Auto-generated method stub
29 checkUpdate.stop();
30 dialog = ProgressDialog.show(ARTestDrawing2D.this,
31 "AndroidRes",
32 "I am thinking...",
33 true,true);
34 checkUpdate.start();
35 }
36 });
37 }
上边的例子中引用了Handler(official)作为multi-thread相互传递数据的载体,接下来为ProgressDialog实现一个可视化进度条(progressBar)的方法中依然需要调用Handler(Internal),借用这个例子大家也可以多了解Handler的用法。
利用一个可视化进度条取代第一个例子中比较抽象的旋转轮,让用户更加直观的了解当前任务的进度。初始化的方法如下:
1 dialog = new ProgressDialog(ARTestDrawing2D.this);
2 dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
3 dialog.setTitle("AndroidRes");
4 dialog.setMessage("I am thinking...");
看起来稍微比第一个例子复杂一些,每个参数都单独利用成员方法赋值。
其中SetProgressStyle用来设置显示模式,通常为STYLE_HORIZONTAL。下边通过一个完整的例子了解它的初始化和设置方法(例子来源于Android官网):
01 static final int PROGRESS_DIALOG = 0;
02 Button button;
03 ProgressThread checkUpdate;
04 ProgressDialog dialog;
05 /** Called when the <A title=activity href="http://www.androidres.com/index.php/2009/02/09/activity/">activity</A> is first created. */
06 public void onCreate(Bundle savedInstanceState) {
07 super.onCreate(savedInstanceState);
08 setContentView(R.layout.main);
09 // Setup the button that starts the progress dialog
10 button = (Button) findViewById(R.id.Compute);
11 button.setOnClickListener(new OnClickListener(){
12 public void onClick(View v) {
13 showDialog(PROGRESS_DIALOG);
14 }
15 });
16 }
17 protected Dialog onCreateDialog(int id) {
18 switch(id) {
19 case PROGRESS_DIALOG:
20 dialog = new ProgressDialog(ARTestDrawing2D.this);
21 dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
22 dialog.setTitle("AndroidRes");
23 dialog.setMessage("I am thinking...");
24 checkUpdate = new ProgressThread(handler);
25 checkUpdate.start();
26 return dialog;
27 default:
28 return null;
29 }
30 }
31 // Define the Handler that receives messages from the thread and update the progress
32 final Handler handler = new Handler() {
33 public void handleMessage(Message msg) {
34 int total = msg.getData().getInt("total");
35 dialog.setProgress(total);
36 if (total >= 100){
37 dismissDialog(PROGRESS_DIALOG);
38 checkUpdate.setState(ProgressThread.STATE_DONE);
39 total = 0;
40 }
41 }
42 };
43 /** Nested class that performs progress calculations (counting) */
44 private class ProgressThread extends Thread {
45 Handler mHandler;
46 final static int STATE_DONE = 0;
47 final static int STATE_RUNNING = 1;
48 int mState;
49 int total;
50 ProgressThread(Handler h) {
51 mHandler = h;
52 }
53 public void run() {
54 mState = STATE_RUNNING;
55 total = 0;
56 while (mState == STATE_RUNNING) {
57 try {
58 Thread.sleep(100);
59 } catch (InterruptedException e) {
60 Log.e("ERROR", "AndroidRes Thread Interrupted");
61 }
62 Message msg = mHandler.obtainMessage();
63 Bundle b = new Bundle();
64 b.putInt("total", total);
65 msg.setData(b);
66 mHandler.sendMessage(msg);
67 total++;
68 }
69 }
70 /* sets the current state for the thread,
71 * used to stop the thread */
72 public void setState(int state) {
73 mState = state;
74 }
75 }
例子理解起来相对比较容易,对两个比较主要的对象做个简单的说明:
checkUpdate: 从主线程中创建一个用于计算某项任务的线程,同时也是利用ProgessBar所追踪的对象,指示这个线程的任务进度。
handler: 利用这个Handler可以将线程中的数据实时反映到主线程中的ProgessBar,使其可以实时接收到最新进度数据。
分享到:
相关推荐
android 自定义组合progressdialog进度条,方便你的使用............................................................................................
在Android开发中,Dialog和ProgressDialog是两种常用的UI组件,用于向用户展示临时信息或进行阻塞操作时的反馈。本文将详细介绍如何在Android中创建透明背景的Dialog和ProgressDialog,以及涉及的相关XML资源。 ...
下面我们将详细探讨Dialog的基本概念、封装工具类的优点以及如何实现和使用这样的工具类。 1. Dialog基本概念: Dialog是Android系统提供的一种UI组件,它浮现在应用程序的主线程之上,通常用于向用户显示警告、...
ProgressDialog是Dialog的一种特殊形式,它显示一个进度条,通常用于指示后台任务的执行进度,比如文件下载、数据加载等。在这个“安卓自定义Dialog带有进度条的效果的ProgressDialog”示例中,我们将深入探讨如何...
本篇将详细讲解两种常用的Dialog类型:AlertDialog和ProgressDialog,以及涉及到的LayoutInflater工具。 首先,我们来了解**AlertDialog**。AlertDialog是Android中用于创建警告对话框的类,它提供了三种样式:默认...
首先,我们从标题"自定义Dialog 显示正在加载动画效果 progressDialog"出发,了解我们要实现的主要功能。"progressDialog"通常指的是Android内置的ProgressDialog类,用于显示一个带进度条的对话框,常用于表示后台...
Dialog通常是基于AlertDialog或ProgressDialog等系统提供的基础组件进行扩展和定制的。一个通用的Dialog工具类应该包含以下功能: 1. **初始化方法**:创建Dialog实例并设置基本属性,如主题、宽度、高度、背景等。...
public void onProgressChanged(ProgressDialog dialog, int progress, boolean fromUser) { // 在这里处理进度变化 } }); ``` 五、自定义ProgressDialog 尽管ProgressDialog提供了基本的样式,但有时我们可能...
本文将深入探讨如何自定义一个类似于 ProgressDialog 的 Dialog,以满足我们的个性化需求。 首先,了解ProgressDialog,它是一个内置的Android组件,用于显示一个圆形进度条,通常在执行后台任务时显示,让用户知道...
做项目的时候,直接用到了一个...ProgressDialog的创建方式有两种,一种是new Dialog ,一种是调用Dialog的静态方法Dialog.show()。 // 方式一:new Dialog final ProgressDialog dialog = new ProgressDia
ProgressDialog dialog = new ProgressDialog(context); dialog.setProgressStyle(ProgressDialog.STYLE_SPINNER); // 旋转指示器 dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); // 条形进度条 ``` ...
ProgressDialog dialog = new ProgressDialog(context); ``` 2. **设置样式**:你可以通过`setProgressStyle()`方法来选择圆形或水平进度条样式。 ```java dialog.setProgressStyle(ProgressDialog.STYLE_...
创建dialog工具类(包含多种样式),复制到项目中可直接使用
首先,我们需要创建一个新的类来继承自Dialog,因为ProgressDialog本质上就是Dialog的一个子类。这个类将作为我们自定义ProgressDialog的基础: ```java public class CustomProgressDialog extends Dialog { // ...
Dialog对话框的使用 (progressDialog、AlertDialog、点击不消失、进度条) 具体可参考我文章:https://blog.csdn.net/qq_28056277/article/details/84591086 【更新-->下载所需积分太高,更改为固定分值了】
2. 在子线程中,当需要显示ProgressDialog时,通过handler的sendMessage()方法发送一个带有SHOW_PROGRESS_DIALOG标识的消息。 ```java new Thread(new Runnable() { @Override public void run() { // 开始执行...
ProgressDialog dialog = new ProgressDialog(context); dialog.setMessage("加载中..."); dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); // 水平进度条 // 或者 dialog.setProgressStyle...
在Android开发中,`Dialog`工具类是一种常用的组件,它用于在用户界面中显示临时性的信息或者进行交互操作。`Dialog`通常出现在主界面之上,显示一些提示信息、选项或者进行确认操作,不会阻塞应用的主要流程。而`...
关于“工具”标签,可能是指ProgressDialog是一个内置的UI工具,开发者无需从零开始设计,可以直接使用。另外,ProgressDialog也可以通过自定义布局来满足更复杂的需求,但这就需要对Android的布局系统和自定义View...