我们创建进度条对话框的方式有两种:
- 1.直接调用ProgressDialog提供的静态方法show()显示
- 2.创建ProgressDialog,再设置对话框的参数,最后show()出来
效果图如下:
MainActivity.java的代码如下:
package com.deepreality.progressdialogdemo; 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.View; import android.widget.Button; import android.widget.ProgressBar; public class MainActivity extends AppCompatActivity implements View.OnClickListener { private Button btnNormalDialog, btnLinearDialog, btnLiearDialogWithUpdateProgress; private int currentProgress = 0; private int add = 0; private ProgressDialog pd1 = null; private ProgressDialog pd2 = null; private final static int MAXVALUE = 100; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); componentInit(); componentAddOnClickListener(); } Handler handler = new Handler() { @Override public void handleMessage(Message msg) { if (msg.what == 123) { pd2.setProgress(currentProgress); } if (currentProgress >= MAXVALUE) { pd2.dismiss(); } } }; public void componentInit() { btnNormalDialog = findViewById(R.id.main_btnNormalDialog); btnLinearDialog = findViewById(R.id.main_btnLinearDialog); btnLiearDialogWithUpdateProgress = findViewById(R.id.main_btnLinearDialogWithUpdateProgress); } public void componentAddOnClickListener() { btnNormalDialog.setOnClickListener(this); btnLinearDialog.setOnClickListener(this); btnLiearDialogWithUpdateProgress.setOnClickListener(this); } @Override public void onClick(View v) { switch (v.getId()) { case R.id.main_btnNormalDialog:{ //这里的话参数依次为,上下文,标题,内容,是否显示进度,是否可以用取消按钮关闭 ProgressDialog.show(MainActivity.this, "资源加载中", "资源加载中,请稍后..." ,false,true); break; } case R.id.main_btnLinearDialog:{ pd1 = new ProgressDialog(MainActivity.this); //依次设置标题,内容,是否用取消按钮关闭,是否显示进度 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.main_btnLinearDialogWithUpdateProgress:{ //初始化属性 currentProgress = 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(currentProgress < MAXVALUE) { //这里的算法是决定进度条变化的,可以按需要写 currentProgress = 2 * usetime() ; //把信息码发送给handle让更新界面 handler.sendEmptyMessage(123); } } }.start(); break; } default:break; } } //这里设置一个耗时的方法: private int usetime() { add++; try{ Thread.sleep(100); }catch (InterruptedException e) { e.printStackTrace(); } return add; } }