ProgressDialog进度对话框使用方法

进度对话框在平常的应用中很常见,比如下载的时候,打开页面的时候、转移文件等等。有环形的、有长条形的。基本就这两种
创建进度对话框的两种方式:
1、创建ProgressDialog实例,然后调用ProgressDialog提供的静态show()方法显示实例即可
2、创建ProgressDialog实例,然后调用方法对进度条进行设置,然后显示出来。

长条形的进度条还分为两种,第一种是显示进度,第二种是不显示进度。
在接下来的例子中,我们会看到三种:环形进度条、显示进度的长条形进度条、不显示进度的长条形进度条

首先,我们创建一个Android项目,然后编写main.xml文件:

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

这里定义了三个按钮,三个按钮对应了相应的onClick属性

接下来,是ProgressDialogTest.java:

package org.crazyit.ui;  

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


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

    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 showProgress(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;  
    }  
}  

在进行第三个:显示进度的进度条的时候,我们用到了Thread线程,来模拟一个耗时的操作.

转载学习.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值