進度對話框 ProgressDialog 用法總結


ProgressDialog 繼承自AlertDialog,AlertDialog繼承自Dialog
public class ProgressDialog extends AlertDialog
ProgressDialog的創建方式有兩種,一種是new  ProgressDialog, 一種是調用 ProgressDialog 的靜態 方法 show() 創建並顯示,這種進度條只能是圓形條
  ProgressDialog dialog = ProgressDialog.show(this"提示""正在登陸中…"truefalsenull);

常用方法

  • 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_1new 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.layoutnull);
        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;
    }
}

附件列表

     


    免責聲明!

    本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



     
    粵ICP備18138465號   © 2018-2025 CODEPRJ.COM