android学习笔记(38)使用ProgressDialog创建进皮对话框

2015-1-8 13:04:23     人阅读    

             ProgressDialog本身就代表了进度对话框,程序只要创建ProgressDialog实例,并将它显 示出来就是一个进度对话框。当然,开发者也可以设置进度对话框里进度条的方法, ProgressDialog包含了如下常用的方法。

setlndeterminate(boolean indeterminate):设置对话框里的进度条不显示进度值。
setMax(int max):设置对话框里进度条的最大值。
setMessage<CharSequence message):设置对话框里显示的消息。
setProgress(int value):设置对话框里进度条的进度值。
setProgressStyle(int style):设置对话框里进度条的风格。


下面的程序的界面也很简单单,界面上只有一个简单的按钮,当用户单击按钮时系统启动 进度对话框,该进度对话框显示一个耗时任务的完成进度。
程序清单:ProgressDialog\src\org\crazyit\dialog\ProgressDialogTest.java

package org.crazyit.dialog;

import android.app.Activity;
import android.app.Dialog;
import android.app.ProgressDialog;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
public class ProgressDialogTest extends Activity
{
 // 该程序模拟填充长度为100的数组
 private int[] data = new int[100];
 int hasData = 0;
 // 定义进度对话框的标识
 final int PROGRESS_DIALOG = 0x112;
 // 记录进度对话框的完成百分比
 int progressStatus = 0;
 ProgressDialog pd;
 // 定义一个负责更新的进度的Handler
 Handler handler;

 @Override
 public void onCreate(Bundle savedInstanceState)
 {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.main);
  Button execBn = (Button) findViewById(R.id.exec);
  execBn.setOnClickListener(new OnClickListener()
  {
   @Override
   public void onClick(View source)
   {
    showDialog(PROGRESS_DIALOG);
   }
  });
  handler = new Handler()
  {
   @Override
   public void handleMessage(Message msg)
   {
    // 表明消息是由该程序发送的。
    if (msg.what == 0x111)
    {
     pd.setProgress(progressStatus);
    }
   }
  };
 }

 @Override
 public Dialog onCreateDialog(int id, Bundle status)
 {
  System.out.println("------create------");
  switch (id)
  {
   case PROGRESS_DIALOG:
    // 创建进度对话框
    pd = new ProgressDialog(this);
    pd.setMax(100);
    // 设置对话框的标题
    pd.setTitle("任务完成百分比");
    // 设置对话框 显示的内容
    pd.setMessage("耗时任务的完成百分比");
    // 设置对话框不能用“取消”按钮关闭
    pd.setCancelable(false);
    // 设置对话框的进度条风格
//    pd.setProgressStyle(ProgressDialog.STYLE_SPINNER);
    pd.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
    // 设置对话框的进度条是否显示进度
    pd.setIndeterminate(false);
    break;
  }
  return pd;
 }

 // 该方法将在onCreateDialog方法调用之后被回调
 @Override
 public void onPrepareDialog(int id, Dialog dialog)
 {
  System.out.println("------prepare------");
  super.onPrepareDialog(id, dialog);
  switch (id)
  {
   case PROGRESS_DIALOG:
    // 对话框进度清零
    pd.incrementProgressBy(-pd.getProgress());
    new Thread()
    {
     public void run()
     {
      while (progressStatus < 100)
      {
       // 获取耗时操作的完成百分比
       progressStatus = doWork();
       // 发送消息到Handler
       Message m = new Message();
       m.what = 0x111;
       // 发送消息
       handler.sendMessage(m);
      }

      // 如果任务已经完成
      if (progressStatus >= 100)
      {
       // 关闭对话框
       pd.dismiss();
      }
     }
    }.start();
    break;
  }
 }

 // 模拟一个耗时的操作。
 public int doWork()
 {
  // 为数组元素赋值
  data[hasData++] = (int) (Math.random() * 100);
  try
  {
   Thread.sleep(100);
  }
  catch (InterruptedException e)
  {
   e.printStackTrace();
  }
  return hasData;
 }
}


上面的程序同样采用基于Activity回调的方式来开发对话框,程序中①号代码设置进度 条风格为圆形风格(就是一个不断旋转的圆圈),②号代码设置进度条风格为普通的水平进 度条。③号代码设置进度条是否要带进度显示。
如果将程序中②号代码代码注释掉,也就是显示圆形风格的进度条
如果将上面的程序中①号代码注释掉,也就是显示水平风格的进度条


原文地址:http://www.itmmd.com/201501/458.html
该文章由 萌萌的IT人 整理发布,转载须标明出处。

android学习笔记(39)消息提示使用Toast昱示提示信息輕   上一篇
下一篇  android 发送邮件问题记录
精彩回复
我要追加问题,请求站长解决!
姓名:       

《程序员app》专门为程序员量身定做!