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. 初探Java字符串

    转载: 初探Java字符串 String印象 String是java中的无处不在的类,使用也很简单.初学java,就已经有字符串是不可变的盖棺定论,解释通常是:它是final的. 不过,String是 ...

  2. Django+Nginx+uwsgi搭建自己的博客(一)

    最近对写爬虫有些厌倦了,于是将方向转移到了Web开发上.其实在之前自己也看过一部分Flask的资料,但总觉得Flask的资料有些零散,而且需要的各种扩展也非常多.因此,我将研究方向转移到了另一个主流的 ...

  3. latex常用命令

    首行不缩进:在顶格的段落前面加上 \noindent 增加空格:\vspace{长度}:精确增加垂直距离,\hspace{长度} 与 \addvspace{长度}:增加高度长度的垂直空间 在公式的上. ...

  4. 【3.16高一(第二学期)模拟测试】 T3,T4题解

    看到这个标题我想你一定会想为什么小编只发T3,T4的题解,原因有很多:1)小编也不怎么会讲:2)小编搜遍各大OJ,都没有找到可以提交的地方:3)虽然给了测试数据,小编懒得一个一个试.如果你找到了测评网 ...

  5. JSP中动态INCLUDE与静态INCLUDE的区别?

    动态INCLUDE用jsp:include动作实现 它总是会检查所含文件中的变化,适合用于包含动态页面,并且可以带参数 静态INCLUDE用include伪码实现,定不会检查所含文件的变化,适用于包含 ...

  6. PHP设置会话(Session)超时过期时间实现登录时间限制[转]

    用户登录系统60分钟后如果没有操作就自动退出 第一种方法即设置php.ini配置文件,设置session.gc_maxlifetime和session.cookie_lifetime节点属性值,当然也 ...

  7. RxSwift 系列(五)

    前言 本篇文章将要学习RxSwift中过滤和条件操作符,在RxSwift中包括了: filter distinctUntilChanged elementAt single take takeLast ...

  8. Vue 2.0学习(六)内置指令

    基本指令 1.v-cloak v-cloak不需要表达式,它会在Vue实例结束编译时从绑定的HTML元素上移除,经常和CSS的display:none配合使用. <div id="ap ...

  9. 【BZOJ 3729】3729: Gty的游戏 (Splay维护dfs序+博弈)

    未经博主同意不得转载 3729: Gty的游戏 Time Limit: 20 Sec  Memory Limit: 128 MBSubmit: 448  Solved: 150 Description ...

  10. BZOJ1064 NOI2008假面舞会

    挺神的这题,发现只有环和链两种情况 搜索时我们只考虑环的,因为链可以看成找不到分类的环. 当成链时大小是的最大值是各链长的和,最小值是3 当成环时最大值是各环长的gcd,最小值是大于3的最小的ans的 ...