`
liyinfeng56
  • 浏览: 93776 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Dialog工具箱 – ProgressDialog

阅读更多
在此前的几个教程中引出过一些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 自定义组合progressdialog进度条,方便你的使用............................................................................................

    android中透明Dialog及ProgressDialog的实现

    在Android开发中,Dialog和ProgressDialog是两种常用的UI组件,用于向用户展示临时信息或进行阻塞操作时的反馈。本文将详细介绍如何在Android中创建透明背景的Dialog和ProgressDialog,以及涉及的相关XML资源。 ...

    简单Dialog工具类

    下面我们将详细探讨Dialog的基本概念、封装工具类的优点以及如何实现和使用这样的工具类。 1. Dialog基本概念: Dialog是Android系统提供的一种UI组件,它浮现在应用程序的主线程之上,通常用于向用户显示警告、...

    安卓自定义Dialog带有进度条的效果的ProgressDialog

    ProgressDialog是Dialog的一种特殊形式,它显示一个进度条,通常用于指示后台任务的执行进度,比如文件下载、数据加载等。在这个“安卓自定义Dialog带有进度条的效果的ProgressDialog”示例中,我们将深入探讨如何...

    Android Dialog用法-AlertDialog,ProgressDialog

    本篇将详细讲解两种常用的Dialog类型:AlertDialog和ProgressDialog,以及涉及到的LayoutInflater工具。 首先,我们来了解**AlertDialog**。AlertDialog是Android中用于创建警告对话框的类,它提供了三种样式:默认...

    自定义Dialog 显示正在加载动画效果 progressDialog

    首先,我们从标题"自定义Dialog 显示正在加载动画效果 progressDialog"出发,了解我们要实现的主要功能。"progressDialog"通常指的是Android内置的ProgressDialog类,用于显示一个带进度条的对话框,常用于表示后台...

    通用的Dialog工具类

    Dialog通常是基于AlertDialog或ProgressDialog等系统提供的基础组件进行扩展和定制的。一个通用的Dialog工具类应该包含以下功能: 1. **初始化方法**:创建Dialog实例并设置基本属性,如主题、宽度、高度、背景等。...

    android dialog ——ProgressDialog 进度条对话框详解

    public void onProgressChanged(ProgressDialog dialog, int progress, boolean fromUser) { // 在这里处理进度变化 } }); ``` 五、自定义ProgressDialog 尽管ProgressDialog提供了基本的样式,但有时我们可能...

    Android自定义类似ProgressDialog效果的Dialog

    本文将深入探讨如何自定义一个类似于 ProgressDialog 的 Dialog,以满足我们的个性化需求。 首先,了解ProgressDialog,它是一个内置的Android组件,用于显示一个圆形进度条,通常在执行后台任务时显示,让用户知道...

    android 中ProgressDialog实现全屏效果的示例

    做项目的时候,直接用到了一个...ProgressDialog的创建方式有两种,一种是new Dialog ,一种是调用Dialog的静态方法Dialog.show()。 // 方式一:new Dialog final ProgressDialog dialog = new ProgressDia

    android demo,ProgressDialog的源代码的实现。

    ProgressDialog dialog = new ProgressDialog(context); dialog.setProgressStyle(ProgressDialog.STYLE_SPINNER); // 旋转指示器 dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); // 条形进度条 ``` ...

    Android ProgressDialog进度条对话框.rar

    ProgressDialog dialog = new ProgressDialog(context); ``` 2. **设置样式**:你可以通过`setProgressStyle()`方法来选择圆形或水平进度条样式。 ```java dialog.setProgressStyle(ProgressDialog.STYLE_...

    创建dialog工具类(包含多种样式)

    创建dialog工具类(包含多种样式),复制到项目中可直接使用

    android ProgressDialog 自定义样式

    首先,我们需要创建一个新的类来继承自Dialog,因为ProgressDialog本质上就是Dialog的一个子类。这个类将作为我们自定义ProgressDialog的基础: ```java public class CustomProgressDialog extends Dialog { // ...

    Dialog对话框的使用 (progressDialog、AlertDialog、点击不消失、进度条)

    Dialog对话框的使用 (progressDialog、AlertDialog、点击不消失、进度条) 具体可参考我文章:https://blog.csdn.net/qq_28056277/article/details/84591086 【更新--&gt;下载所需积分太高,更改为固定分值了】

    子线程控制ProgressDialog的可见性

    2. 在子线程中,当需要显示ProgressDialog时,通过handler的sendMessage()方法发送一个带有SHOW_PROGRESS_DIALOG标识的消息。 ```java new Thread(new Runnable() { @Override public void run() { // 开始执行...

    Android的各种Dialog的实现

    ProgressDialog dialog = new ProgressDialog(context); dialog.setMessage("加载中..."); dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); // 水平进度条 // 或者 dialog.setProgressStyle...

    dialog工具类

    在Android开发中,`Dialog`工具类是一种常用的组件,它用于在用户界面中显示临时性的信息或者进行交互操作。`Dialog`通常出现在主界面之上,显示一些提示信息、选项或者进行确认操作,不会阻塞应用的主要流程。而`...

    android 对话框中的进度条 (ProgressDialog)

    关于“工具”标签,可能是指ProgressDialog是一个内置的UI工具,开发者无需从零开始设计,可以直接使用。另外,ProgressDialog也可以通过自定义布局来满足更复杂的需求,但这就需要对Android的布局系统和自定义View...

Global site tag (gtag.js) - Google Analytics