Android进度对话框(ProgressDialog)使用教程与代码示例

欢迎来到Android ProgressDialog示例教程。在本教程中,我们将学习如何创建一个包含进度条的Android进度对话框。同时我们将详细讨论ProgressDialog和ProgressBar之间的区别。

安卓进度对话框

Android ProgressDialog是AlertDialog的扩展。要了解更多关于AlertDialog的信息,请查看相关教程。Android ProgressDialog是一个对话框/窗口,用于显示任务的进度。Android Progress Dialog几乎与ProgressBar相同,唯一不同的是它以对话框的形式显示。要创建ProgressDialog以显示ProgressBar,我们需要像这样实例化它:

ProgressDialog progress = new ProgressDialog(this);

Android ProgressDialog和ProgressBar的差别是什么?

  • ProgressBar:是一个View(如TextView,ImageView,Button等),可用于布局中显示一些进度。ProgressBar用于指示应用程序中的某些内容仍在加载,而用户仍然可以与其他部分进行交互。
  • ProgressDialog:是带有”内置”ProgressBar的对话框。当我们希望阻止用户在等待期间与应用程序进行交互时,使用ProgressDialog。对话框的特点是冻结用户的所有操作,直到对话框被关闭。

Android ProgressDialog 属性

以下是Android ProgressDialog的一些重要属性:

  • setMessage():该方法用于向用户显示消息。例如:加载中…
  • setTitle():该方法用于设置对话框的标题
  • setProgressStyle(ProgressDialog.STYLE_HORIZONTAL):该方法用于在对话框中显示水平进度条
  • setProgressStyle(ProgressDialog.STYLE_SPINNER):该方法用于在对话框中显示圆圈/旋转进度条
  • setMax():该方法用于设置最大值
  • getProgress():该方法用于获取当前的进度值(以数字形式)
  • getMax():该方法返回进度的最大值
  • show(Context context, CharSequence title, CharSequence message):这是一个静态方法,用于显示进度对话框
  • incrementProgressBy(int diff):该方法通过传递的差值参数来增加进度条的进度

在本教程中,我们将开发一个应用程序,其中包含一个水平进度条的进度对话框,在每200毫秒后会增加一次。

Android项目结构中的进度对话框

安卓进度对话框示例

下面的XML代码显示,activity_main.xml文件包含一个按钮,点击按钮时会调用一个进度对话框:

<RelativeLayout xmlns:android="https://schemas.android.com/apk/res/android"
    xmlns:tools="https://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity" >

    <Button
        android:id="@+id/button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="启动进度对话框"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="57dp" />

</RelativeLayout>

下面是MainActivity.java文件的代码:

package com.Olivia.progressdialog;

import android.app.ProgressDialog;
import android.os.Handler;
import android.os.Message;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;

public class MainActivity extends AppCompatActivity {

    Button button;
    ProgressDialog progressDoalog;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        button = (Button) findViewById(R.id.button);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                progressDoalog = new ProgressDialog(MainActivity.this);
                progressDoalog.setMax(100);
                progressDoalog.setMessage("正在加载...");
                progressDoalog.setTitle("进度对话框示例");
                progressDoalog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
                progressDoalog.show();
                new Thread(new Runnable() {
                    @Override
                    public void run() {
                        try {
                            while (progressDoalog.getProgress() <= progressDoalog
                                    .getMax()) {
                                Thread.sleep(200);
                                handle.sendMessage(handle.obtainMessage());
                                if (progressDoalog.getProgress() == progressDoalog
                                        .getMax()) {
                                    progressDoalog.dismiss();
                                }
                            }
                        } catch (Exception e) {
                            e.printStackTrace();
                        }
                    }
                }).start();
            }

            Handler handle = new Handler() {
                @Override
                public void handleMessage(Message msg) {
                    super.handleMessage(msg);
                    progressDoalog.incrementProgressBy(1);
                }
            };
        });
    }
}

下面的代码激活处理程序,在其中编写代码来增加进度条的值:

handle.sendMessage(handle.obtainMessage());

以下是在Android模拟器中运行Android进度对话框示例应用程序时的输出。这就结束了Android ProgressDialog示例教程。您可以通过下面的链接下载最终的Android ProgressDialog项目。

下载Android ProgressDialog项目

bannerAds