ProgressDialog 继承自AlertDialog,AlertDialog继承自Dialog
public class ProgressDialog extends AlertDialog

ProgressDialog的创建方式有两种,一种是new ProgressDialog,一种是调用ProgressDialog的静态方法show()创建并显示,这种进度条只能是圆形条。

 ProgressDialog dialog = ProgressDialog.show(this, "提示", "正在登陆中…", true, false, null);


常用方法

  • setProgressStyle:设置进度条风格,风格为圆形,旋转的。
  • setTitlt:设置标题
  • setMessage:设置提示信息;
  • setIcon:设置标题图标;
  • setIndeterminate:设置ProgressDialog 的进度条是否不明确;这个属性对于ProgressDailog默认的转轮模式没有实际意义,默认下设置为true,它仅仅对带有ProgressBar的Dialog有作用。修改这个属性为false后可以实时更新进度条的进度。
  • setCancelable:设置ProgressDialog 是否可以按返回键取消;
  • cancelListner:当前Dialog强制取消之后将会被执行,通常用来清理未完成的任务。
  • setButton:设置ProgressDialog 的一个Button(需要监听Button事件);
  • show:显示ProgressDialog。
  • cancel:删除progressdialog
  • dismiss: 删除progressdialog 作用和cancel相同
  • setMax(int)、getMax:设置最大进度条的值
  • setProgress(int)、getProgress:更新进度条,当然一般都需要Handler的结合来更新进度条
  • incrementProgressBy(int)增加进度条
  • setProgressDrawable:设置progress发生变化时的进度指示条的背景图

Mainactivity

public class MainActivity extends ListActivity {
    private ProgressDialog dialog;
    private AlertDialog alertDialog;
    private ProgressDialogFragment dialogFragment;
    private Handler mHandler = new Handler() {
        @Override
        public void handleMessage(android.os.Message msg) {
            switch (msg.what) {
            case 0:
                dialog.cancel();// cancel和dismiss唯一的区别是,调用cancel方法会【回调】OnCancelListener
                break;
            case 1:
                int progress = (Integer) msg.obj;
                if (progress < 20) {
                    dialog.incrementProgressBy(5);// 增加进度条的进度
                    mHandler.sendMessageDelayed(Message.obtain(mHandler, 1, progress + 1), 150);
                } else dialog.dismiss();
                break;
            case 2:
                alertDialog.dismiss();
                break;
            case 3:
                getFragmentManager().beginTransaction().remove(dialogFragment).commit();
                break;
            }
        };
    };
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        String[] array = { "ProgressDialog.STYLE_SPINNER:不确定的圆形滚动条",//
                "ProgressDialog.STYLE_HORIZONTAL:确定的水平滚动条", //
                "通过AlertDialog实现不确定圆形滚动条效果,其View包含一个ProgressBar",//
                "通过DialogFragment实现不确定圆形滚动条效果,其View包含一个ProgressBar", };
        setListAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, new ArrayList<String>(Arrays.asList(array))));
        Fragment fragment = getFragmentManager().findFragmentByTag("ProgressDialogFragment");
        //旋转屏幕后dialogFragment为空,但是findFragmentByTag的结果不为空,所以dialogFragment将永远不会消失
        if (fragment != null) {
            if (dialogFragment == null) Toast.makeText(MainActivity.this, "dialogFragment为空,findFragmentByTag不为空", Toast.LENGTH_SHORT).show();
            getFragmentManager().beginTransaction().remove(fragment).commit();
        }
    }
    @Override
    protected void onDestroy() {
        super.onDestroy();
        if (mHandler != null) mHandler.removeCallbacksAndMessages(null);
    }
    @Override
    protected void onListItemClick(ListView l, View v, int position, long id) {
        switch (position) {
        case 0://旋转屏幕后直接消失
            showPD();
            mHandler.sendEmptyMessageDelayed(0, 3000);
            break;
        case 1://旋转屏幕后直接消失
            showHorizontalPD();
            mHandler.sendMessageDelayed(Message.obtain(mHandler, 1, 0), 150);
            break;
        case 2://旋转屏幕后直接消失
            showAlertDialog();
            mHandler.sendEmptyMessageDelayed(2, 3000);
            break;
        case 3://旋转屏幕后会重新创建
            showDialogFragment();
            mHandler.sendEmptyMessageDelayed(3, 3000);
            break;
        }
    }
    private void showPD() {
        dialog = new ProgressDialog(this);
        dialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);//转盘
        dialog.setCancelable(false);
        dialog.setCanceledOnTouchOutside(false);
        dialog.setTitle("提示");
        dialog.setOnDismissListener(new DialogInterface.OnDismissListener() {
            @Override
            public void onDismiss(DialogInterface dialog) {
                Toast.makeText(MainActivity.this, "消失了", Toast.LENGTH_SHORT).show();
            }
        });
        dialog.setMessage("正在加载,请稍后……");
        dialog.show();
    }
    private void showHorizontalPD() {
        dialog = new ProgressDialog(this);
        dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
        dialog.setCancelable(true);
        dialog.setCanceledOnTouchOutside(false);
        dialog.setIcon(R.drawable.ic_launcher);//这里指的是标题左侧的图标。注意:如果没有设置title只设置Icon的话,是不会显示图标的  
        dialog.setTitle("提示");
        dialog.setMax(100);
        dialog.setButton(DialogInterface.BUTTON_POSITIVE, "确定…", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                Toast.makeText(MainActivity.this, "确定", Toast.LENGTH_SHORT).show();
            }
        });
        dialog.setButton(DialogInterface.BUTTON_NEGATIVE, "取消…", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                Toast.makeText(MainActivity.this, "取消", Toast.LENGTH_SHORT).show();
            }
        });
        dialog.setMessage("正在加载,请稍后……");
        dialog.show();
    }
    private void showAlertDialog() {
        alertDialog = new AlertDialog.Builder(this).setView(R.layout.layout).create();
        alertDialog.getWindow().setBackgroundDrawableResource(android.R.color.transparent);//设置Dialog背景透明效果
        alertDialog.show();
    }
    private void showDialogFragment() {
        dialogFragment = ProgressDialogFragment.newInstance("加载中…");
        dialogFragment.show(getFragmentManager(), "ProgressDialogFragment");
    }

}

ProgressDialogFragment

public class ProgressDialogFragment extends DialogFragment {
    /**构造时把传入的参数带进来,注意一定要通过Bundle及setArguments传递数据*/
    public static ProgressDialogFragment newInstance(String message) {
        Bundle bundle = new Bundle();//把所有需要传递的数据都放在Bundle中
        bundle.putString("message", message);
        ProgressDialogFragment dialog = new ProgressDialogFragment();
        dialog.setArguments(bundle);//通过setArguments把Bundle传递过去
        return dialog;
    }
    @SuppressLint("InflateParams")
    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        View contentView = getActivity().getLayoutInflater().inflate(R.layout.layout, null);
        TextView tv_messag = (TextView) contentView.findViewById(R.id.tv_messag);
        if (getArguments() != null && !TextUtils.isEmpty(getArguments().getString("message"))) {
            tv_messag.setVisibility(View.VISIBLE);
            tv_messag.setText(getArguments().getString("message"));
        } else tv_messag.setVisibility(View.GONE);
        Dialog dialog = new Dialog(getActivity());
        dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);//设置Dialog没有标题。需在setContentView之前设置,在之后设置会报错
        dialog.getWindow().setBackgroundDrawableResource(android.R.color.transparent);//设置Dialog背景透明效果
        dialog.setCancelable(false);
        dialog.setContentView(contentView);
        return dialog;
    }

}


附件列表

进度对话框 ProgressDialog 用法总结的更多相关文章

  1. Android 进度对话框 ProgressDialog

    protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentV ...

  2. Android 下载进度对话框 ProgressDialog

    protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentV ...

  3. Android——进度对话框

    java类代码: //普通进度对话框 public void bt8_onClick(View v) { final ProgressDialog progressDialog = new Progr ...

  4. 10.Android之ProgressDialog进度对话框学习

    APP应用中经常会下载某些东西,这里面有涉及到进度对话框,今天来学习下. 首先,布局里放进两个按钮,点击一个显示条形进度条,另一个显示圆形进度条.代码如下: <?xml version=&quo ...

  5. 使用ProgressDialog创建进度对话框

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

  6. android 对话框中的进度条 (ProgressDialog)

    from:http://byandby.iteye.com/blog/817214 显然要定义对话框进度条就要用ProgressDialog,首先我们需要创建ProgressDialog对象,当然这里 ...

  7. Android开发系列(二十七):使用ProgressDialog创建进度对话框

    进度对话框在寻常的应用中非经常见,比方下载的时候,打开页面的时候.转移文件等等.有环形的.有长条形的. 基本就这两种 创建进度对话框的两种方式: 1.创建ProgressDialog实例,然后调用Pr ...

  8. 2.5.6 使用progressDialog创建进度对话框

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout ...

  9. Android--创建进度框ProgressDialog

    1.布局文件progress_dialog_activity.xml <?xml version="1.0" encoding="utf-8"?> ...

随机推荐

  1. 在kubernetes运行一个容器案例

    1. 检查kubernetes 组件是否正常运行. [root@c720120 ~]# kubectl get cs NAME                 STATUS    MESSAGE    ...

  2. 【WPF】奇怪的INotifyPropertyChanged的实现

    MSDN是这样解释的: INotifyPropertyChanged 接口用于向客户端(通常是执行绑定的客户端)发出某一属性值已更改的通知. 例如,考虑一个带有名为 FirstName 属性的 Per ...

  3. python3 爬虫教学之爬取链家二手房(最下面源码) //以更新源码

    前言 作为一只小白,刚进入Python爬虫领域,今天尝试一下爬取链家的二手房,之前已经爬取了房天下的了,看看链家有什么不同,马上开始. 一.分析观察爬取网站结构 这里以广州链家二手房为例:http:/ ...

  4. java 读入文件 FileInputStream

    package com.mkyong.io; import java.io.File; import java.io.FileInputStream; import java.io.IOExcepti ...

  5. Python开发基础-Day32 进程间通信、进程池、协程

    进程间通信 进程彼此之间互相隔离,要实现进程间通信(IPC),multiprocessing模块支持两种形式:队列和管道,这两种方式都是使用消息传递的. 进程队列queue 不同于线程queue,进程 ...

  6. 剖析ironic

    关键技术 在安装操作系统时需要存储介质来存储系统镜像.需要控制物理机开关机,在网络部署环境中还需要预启动环境. PXE (预启动环境) IPMI(电源管理) iSCSI(存储) 什么是PXE PXE( ...

  7. [BZOJ2431][HAOI2009]逆序对数列(DP)

    从小到大加数,根据加入的位置转移,裸的背包DP. #include<cstdio> #include<cstring> #include<algorithm> #d ...

  8. [ZROI 9.15模拟赛] Tutorial

    Link: 传送门 可能要补一补之前的题了 题目名字天(Sky)的(De)炭(C)好评啊…… A: 从买/卖物品的配对来考虑: 可以发现如果当前物品为卖,肯定从之前选最小的(无论其为买/卖),因为贡献 ...

  9. Java之多线程 Semaphore(信号量)

    一个计数信号量.从概念上讲,信号量维护了一个许可集.如有必要,在许可可用前会阻塞每一个 acquire(),然后再获取该许可.每个 release() 添加一个许可,从而可能释放一个正在阻塞的获取者. ...

  10. linux基础命令学习(四)用户与群组

    一.linux用户账号的管理 linux用户账号的管理主要包括用户添加.用户删除.用户修改. 添加用户账号就是在系统创建一个新账号,然后为新账号分为用户号.用户组.主目录和登录Shell等资源. 刚添 ...