Android ProgressDialog (进度条对话框)

Android ProgressDialog (进度条对话框) 会弹出一个显示进度的对话框

该对话框在 API 26+ 中被废弃

创建 ProgressDialog 的方式有两种

  1. 调用静态方法 ProgressDialog.show() 显示

    show(Context context, CharSequence title, CharSequence message)
    
    show(Context context, CharSequence title, CharSequence message, boolean indeterminate)
    
    show(Context context, CharSequence title, CharSequence message, boolean indeterminate, boolean cancelable)
    
    show(Context context, CharSequence title, CharSequence message, boolean indeterminate, boolean cancelable, DialogInterface.OnCancelListener cancelListener)
    

    参数说明

    参数 说明
    context 上下文
    title 标题
    message 内容
    indeterminate 是否显示进度
    cancelable 是否可以用取消按钮关闭
    cancelListener 取消的事件监听器
  2. 创建 ProgressDialog 实例,然后设置对话框的参数, 最后 show() 出来

而我们知道,进度条有好几种显示方式,比如圆形的和长条型的,比如有确定结束的和不确定结束的

对了,ProgressDialog 也不能直接从 XML 里创建

本章节我们就来创建常见的几种 ProgressDialog


  1. 创建一个 空的 Android 项目 cn.twle.android.ProgressDialog

  2. 修改 activity_main.xml 创建三个按钮显示三种类型的 ProgressDialog

    <?xml version="1.0" encoding="utf-8" ?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:padding="16dp"
        android:orientation="vertical" >
    
        <Button 
            android:id="@+id/btn_one"
            android:text="普通的圆形 ProgressDialog"
            android:layout_width="wrap_content" 
            android:layout_height="wrap_content" />
    
        <Button 
            android:id="@+id/btn_two"
            android:text="不确定结束的长条 ProgressDialog"
            android:layout_width="wrap_content" 
            android:layout_height="wrap_content" />
    
        <Button 
            android:id="@+id/btn_three"
            android:text="确定结束的长条 ProgressDialog"
            android:layout_width="wrap_content" 
            android:layout_height="wrap_content" />
    
    </LinearLayout>
    
  3. 修改 MainActivity.java

    package cn.twle.android.progressdialog;
    
    import android.support.v7.app.AppCompatActivity;
    import android.os.Handler;
    import android.os.Message;
    import android.os.Bundle;
    
    import android.widget.Button;
    import android.view.View;
    
    import android.content.Context;
    import android.app.ProgressDialog;
    
    public class MainActivity extends AppCompatActivity implements View.OnClickListener{
    
        private ProgressDialog pd1 = null;
        private ProgressDialog pd2 = null;
        private final static int MAXVALUE = 100;
        private int progressStart = 0;
        private int add = 0;
        private Context mContext = null;
    
        //定义一个用于更新进度的 Handler,因为只能由主线程更新界面,所以要用 Handler 传递信息
        final Handler hand = new Handler()
        {
            @Override
            public void handleMessage(Message msg) {
                //这里的话如果接受到信息码是123
                if(msg.what == 123)
                {
                    //设置进度条的当前值
                    pd2.setProgress(progressStart);
                }
                //如果当前大于或等于进度条的最大值,调用dismiss()方法关闭对话框
                if(progressStart >= MAXVALUE)
                {
                    pd2.dismiss();
                }
            }
        };
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            mContext = MainActivity.this;
            bindViews();
        }
    
        private void bindViews() {
            Button btn_one = (Button) findViewById(R.id.btn_one);
            Button btn_two = (Button) findViewById(R.id.btn_two);
            Button btn_three = (Button) findViewById(R.id.btn_three);
            btn_one.setOnClickListener(this);
            btn_two.setOnClickListener(this);
            btn_three.setOnClickListener(this);
        }
    
        @Override
        public void onClick(View v) {
            switch (v.getId()){
                case R.id.btn_one:
    
                    ProgressDialog.show(MainActivity.this, "资源加载中", "资源加载中,请稍后...",false,true);
                    break;
                case R.id.btn_two:
                    pd1 = new ProgressDialog(mContext);
    
                    //依次设置标题,内容,是否用取消按钮关闭,是否显示进度
                    pd1.setTitle("软件更新中");
                    pd1.setMessage("软件正在更新中,请稍后...");
                    pd1.setCancelable(true);
    
                    //这里是设置进度条的风格,HORIZONTAL 是水平进度条,SPINNER 是圆形进度条
                    pd1.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
                    pd1.setIndeterminate(true);
    
                    //调用 show() 方法将 ProgressDialog 显示出来
                    pd1.show();
                    break;
                case R.id.btn_three:
    
                    //初始化属性
                    progressStart = 0;
                    add = 0;
                    //依次设置一些属性
                    pd2 = new ProgressDialog(MainActivity.this);
                    pd2.setMax(MAXVALUE);
                    pd2.setTitle("文件读取中");
                    pd2.setMessage("文件加载中,请稍后...");
                    //这里设置为不可以通过按取消按钮关闭进度条
                    pd2.setCancelable(false);
                    pd2.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
                    //这里设置的是是否显示进度,设为false才是显示的哦
                    pd2.setIndeterminate(false);
                    pd2.show();
                    //这里的话新建一个线程,重写run()方法,
                    new Thread()
                    {
                        public void run()
                        {
                            while(progressStart < MAXVALUE)
                            {
                                //这里的算法是决定进度条变化的,可以按需要写
                                progressStart = 2 * usetime() ;
                                //把信息码发送给handle让更新界面
                                hand.sendEmptyMessage(123);
                            }
                        }
                    }.start();
                    break;
            }
        }
    
        //这里设置一个耗时的方法:
        private int usetime() {
            add++;
            try{
                Thread.sleep(100);
            }catch (InterruptedException e) {
                e.printStackTrace();
            }
            return add;
        }
    }
    

Android 基础教程

关于   |   FAQ   |   我们的愿景   |   广告投放   |  博客

  简单教程,简单编程 - IT 入门首选站

Copyright © 2013-2022 简单教程 twle.cn All Rights Reserved.