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. Codeforces Round #345 (Div. 1) D - Zip-line 带单点修改的LIS 主席树 | 离线树状数组

    D - Zip-line #include<bits/stdc++.h> #define LL long long #define fi first #define se second # ...

  2. HashMap实现原理及常见问题

    1.简介 HashMap是基于哈希表的Map接口的实现,用来存放键值对(Entry<Key,Value>),并提供可选的映射操作.使用put(Key,Value)存储对象到HashMap中 ...

  3. [APIO2018]铁人两项 --- 圆方树

     [APIO2018] 铁人两项 题目大意: 给定一张图,问有多少三元组(a,b,c)(a,b,c 互不相等)满足存在一条点不重复的以a为起点,经过b,终点为c的路径 如果你不会圆方树 ------- ...

  4. 【20181027T2】易水决【贪心+堆】

    原题:loj6035 [错解] 全肝T1了没怎么想 [正解] 一眼贪心 先考虑\(b_i=0\)怎么做 可以模拟一个正常人的思维 开一个堆,记录每个任务需要的时间(包括等待),每次从中取出一个任务,表 ...

  5. Codeforces 990G 点分治+暴力

    题意:给出一棵点带权的树,求i\(\in\)[1,200000]所有路径的上点权的gcd==i的个数. 考虑点分治,对于一棵以u为根的子树,如何统计经过u的路径的答案? 显然既然是经过点u的路径,那么 ...

  6. Codeforces 839E Mother of Dragons(极大团)

    [题目链接] http://codeforces.com/contest/839/problem/E [题目大意] 现在有一些点,现在你有k的液体,随意分配给这些点, 当两个点有边相连的时候,他们能产 ...

  7. jmeter用beanshell调用自己写的jar进行MD5加密

    1.先在eclipse里面写好MD5的加密文件,用eclipse执行一遍,确保文件不会报错 Str2MD5.java 内容如下: package hehe.md5; import java.secur ...

  8. 函数中的 arguments 对象

    JavaScript函数具有像数组一样的对象,这些对象称为arguments,与传递给函数的参数相对应.传递给JavaScript函数的所有参数都可以使用arguments对象来引用. 现在我们开始学 ...

  9. CentOS下的RPM包制作教程收集(rpmbuild)

    http://www.jinbuguo.com/redhat/rpmbuild.html(中文手册) https://www.linuxidc.com/Linux/2016-09/134955.htm ...

  10. HDU 4705 Y (2013多校10,1010题,简单树形DP)

    Y Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)Total Submiss ...