使用ProgressDialog创建进度对话框

    ProgressDialog代表了进度对话框,程序只要创建ProgressDialog实例,并将它显示出来就是一个进度对画框。使用ProgressDialog创建进度对话框有如下两种方式。

    ①如果只是创建简单的对话框,调用ProgressDialog提供的静态show()方法显示对话框即可。

    ②创建ProgressDialog,然后调用方法对对话框里的进度条进行设置,设置完成后将对话框显示出来即可。

    为了对进度对话框里的进度进行设置,ProgressDialog包含了如下常用的方法。

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

   下面程序的界面也很简单,界面上只有三个简单的按钮,当用户单击不同按钮时系统将会启动不同的进度对话框。其中第三个按钮激发的进度对话框比较复杂,该对话框使用填充数组来模拟耗时任务,随着任务的进行不断更新进度对话框上进度的显示。

   

<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:onClick="showIndeterminate"
        android:text="不显示的进度条"/>
    <Button android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:onClick="showpProgress"
        android:text="显示进度的进度条"/>
</LinearLayout>

后台Activity代码文件如下:
 

package org.crazyit.helloworld;

import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.app.Activity;
import android.app.ProgressDialog;
import android.view.Menu;
import android.view.View;

public class ProgressDialogTest extends Activity {

    final static int MAX_PROGRESS=100;
    //改程序模拟填充长度为100的数组
    private int[] data=new int[100];
    //记录进度对话框的完成百分比
    int progressStatus=0;
    int hasData=0;
    ProgressDialog pd1,pd2;
    //定义一个负责更新的进度的Handler
    Handler  handler=new Handler()
    {
        public void handleMessage(Message msg)
        {
            //表明消息是由该程序发送的
            if(msg.what==0x123)
            {
                pd2.setProgress(progressStatus);
            }
        }
        
    };
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.progress_dialog_test);
    }

    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 showpProgress(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;
        
    }
    
    
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.progress_dialog_test, menu);
        return true;
    }

}

     上面程序为三个按钮定义了事件处理方法,其中一个按钮的事件处理方法调用了ProgressDialog的静态show()方法创建并显示对话框,如上面①号粗体字代码所示,这也是使用对话框的最简单的方式;第二个按钮的事件处理方法先创建了ProgressDialog对象,再调用该对话框的show()方法将它显示出来,如上面的②号粗体字代码所示;第三个按钮的事件处理方法也先创建ProgressDialog对象,并设置对话框的相关属性,再调用show()方法将它显示出来。
  运行上面的程序出现如下所示界面效果:

 

  

posted @ 2013-10-29 17:11  TealerProg  Views(1626)  Comments(0Edit  收藏  举报