Android ProgressDialog使用總結

ProgressDialog的使用 ProgressDialog 繼承自AlertDialog,AlertDialog繼承自Dialog,實現DialogInterface接口。ide

ProgressDialog的建立方式有兩種,一種是new Dialog ,一種是調用Dialog的靜態方法Dialog.show()。this

// 方式一:new Dialog  
    final ProgressDialog dialog = new ProgressDialog(this);  
    dialog.show();
// 方式二:使用靜態方式建立並顯示,這種進度條只能是圓形條,設置title和Message提示內容  
    ProgressDialog dialog2 = ProgressDialog.show(this, "提示", "正在登錄中");
// 方式三 使用靜態方式建立並顯示,這種進度條只能是圓形條,這裏最後一個參數boolean indeterminate設置是不是不明確的狀態  
    ProgressDialog dialog3 = ProgressDialog  
            .show(this, "提示", "正在登錄中", false);
// 方式四 使用靜態方式建立並顯示,這種進度條只能是圓形條,這裏最後一個參數boolean cancelable 設置是否進度條是能夠取消的  
    ProgressDialog dialog4 = ProgressDialog.show(this, "提示", "正在登錄中",  
            false, true);
// 方式五 使用靜態方式建立並顯示,這種進度條只能是圓形條,這裏最後一個參數 DialogInterface.OnCancelListener  
    // cancelListener用於監聽進度條被取消  
    ProgressDialog dialog5 = ProgressDialog.show(this, "提示", "正在登錄中", true,  
            true, cancelListener);

方式五中須要一個cancelListener,代碼以下;線程

private OnCancelListener cancelListener = new OnCancelListener() {  
  
    @Override  
    public void onCancel(DialogInterface dialog) {  
        // TODO Auto-generated method stub  
        Toast.makeText(MainActivity.this, "進度條被取消", Toast.LENGTH_LONG)  
                .show();  
  
    }  
};

ProgressDialog的樣式有兩種,一種是圓形不明確狀態,一種是水平進度條狀態code

第一種方式:圓形進度條繼承

final ProgressDialog dialog = new ProgressDialog(this);  
        dialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);// 設置進度條的形式爲圓形轉動的進度條  
        dialog.setCancelable(true);// 設置是否能夠經過點擊Back鍵取消  
        dialog.setCanceledOnTouchOutside(false);// 設置在點擊Dialog外是否取消Dialog進度條  
        dialog.setIcon(R.drawable.ic_launcher);//  
        // 設置提示的title的圖標,默認是沒有的,若是沒有設置title的話只設置Icon是不會顯示圖標的  
        dialog.setTitle("提示");  
        // dismiss監聽  
        dialog.setOnDismissListener(new DialogInterface.OnDismissListener() {  
  
            @Override  
            public void onDismiss(DialogInterface dialog) {  
                // TODO Auto-generated method stub  
  
            }  
        });  
        // 監聽Key事件被傳遞給dialog  
        dialog.setOnKeyListener(new DialogInterface.OnKeyListener() {  
  
            @Override  
            public boolean onKey(DialogInterface dialog, int keyCode,  
                    KeyEvent event) {  
                // TODO Auto-generated method stub  
                return false;  
            }  
        });  
        // 監聽cancel事件  
        dialog.setOnCancelListener(new DialogInterface.OnCancelListener() {  
  
            @Override  
            public void onCancel(DialogInterface dialog) {  
                // TODO Auto-generated method stub  
  
            }  
        });  
        //設置可點擊的按鈕,最多有三個(默認狀況下)  
        dialog.setButton(DialogInterface.BUTTON_POSITIVE, "肯定",  
                new DialogInterface.OnClickListener() {  
  
                    @Override  
                    public void onClick(DialogInterface dialog, int which) {  
                        // TODO Auto-generated method stub  
  
                    }  
                });  
        dialog.setButton(DialogInterface.BUTTON_NEGATIVE, "取消",  
                new DialogInterface.OnClickListener() {  
  
                    @Override  
                    public void onClick(DialogInterface dialog, int which) {  
                        // TODO Auto-generated method stub  
  
                    }  
                });  
        dialog.setButton(DialogInterface.BUTTON_NEUTRAL, "中立",  
                new DialogInterface.OnClickListener() {  
  
                    @Override  
                    public void onClick(DialogInterface dialog, int which) {  
                        // TODO Auto-generated method stub  
  
                    }  
                });  
        dialog.setMessage("這是一個圓形進度條");  
        dialog.show();  
        new Thread(new Runnable() {  
  
            @Override  
            public void run() {  
                // TODO Auto-generated method stub  
                try {  
                    Thread.sleep(5000);  
                    // cancel和dismiss方法本質都是同樣的,都是從屏幕中刪除Dialog,惟一的區別是  
                    // 調用cancel方法會回調DialogInterface.OnCancelListener若是註冊的話,dismiss方法不會回掉  
                    dialog.cancel();  
                    // dialog.dismiss();  
                } catch (InterruptedException e) {  
                    // TODO Auto-generated catch block  
                    e.printStackTrace();  
                }  
  
            }  
        }).start();

其中經過Thread.sleep(5000)模擬後臺操做。 cancel和dismiss方法本質都是同樣的,都是從屏幕中刪除Dialog,惟一的區別是:調用cancel方法會回調DialogInterface.OnCancelListener若是註冊的話,dismiss方法不會回掉。接口

第二種方式:水平進度條事件

// 進度條還有二級進度條的那種形式,這裏就不演示了  
    final ProgressDialog dialog = new ProgressDialog(this);  
    dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);// 設置水平進度條  
    dialog.setCancelable(true);// 設置是否能夠經過點擊Back鍵取消  
    dialog.setCanceledOnTouchOutside(false);// 設置在點擊Dialog外是否取消Dialog進度條  
    dialog.setIcon(R.drawable.ic_launcher);// 設置提示的title的圖標,默認是沒有的  
    dialog.setTitle("提示");  
    dialog.setMax(100);  
    dialog.setButton(DialogInterface.BUTTON_POSITIVE, "肯定",  
            new DialogInterface.OnClickListener() {  
  
                @Override  
                public void onClick(DialogInterface dialog, int which) {  
                    // TODO Auto-generated method stub  
  
                }  
            });  
    dialog.setButton(DialogInterface.BUTTON_NEGATIVE, "取消",  
            new DialogInterface.OnClickListener() {  
  
                @Override  
                public void onClick(DialogInterface dialog, int which) {  
                    // TODO Auto-generated method stub  
  
                }  
            });  
    dialog.setButton(DialogInterface.BUTTON_NEUTRAL, "中立",  
            new DialogInterface.OnClickListener() {  
  
                @Override  
                public void onClick(DialogInterface dialog, int which) {  
                    // TODO Auto-generated method stub  
  
                }  
            });  
    dialog.setMessage("這是一個水平進度條");  
    dialog.show();  
    new Thread(new Runnable() {  
  
        @Override  
        public void run() {  
            // TODO Auto-generated method stub  
            int i = 0;  
            while (i < 100) {  
                try {  
                    Thread.sleep(200);  
                    // 更新進度條的進度,能夠在子線程中更新進度條進度  
                    dialog.incrementProgressBy(1);  
                    // dialog.incrementSecondaryProgressBy(10)//二級進度條更新方式  
                    i++;  
  
                } catch (Exception e) {  
                    // TODO: handle exception  
                }  
            }  
            // 在進度條走完時刪除Dialog  
            dialog.dismiss();  
  
        }  
    }).start();

更多的是使用自定義的ProgressDialog,以知足不一樣顯示的須要。rem

相關文章
相關標籤/搜索