-
Notifications
You must be signed in to change notification settings - Fork 217
WaitDialog&TipDialog_tc
🌐 View English Document | 简体中文文档
阻斷式等待提示框,會顯示基礎的環形等待動畫以及進度展示動畫,它是單例的,這就意味著從等待狀態 WaitDialog 切換到提示狀態 TipDialog 是無縫的,你可以自由的選擇在等待結束後顯示成功/警告/錯誤三種狀態的消息提示,動畫的切換也會無縫銜接。
使用前請注意,等待框 WaitDialog 和提示框 TipDialog的背景是與亮/暗色模式相反的,這是為了突出顯示。
使用以下代碼顯示一個等待框:
WaitDialog.show("Please Wait!");
如果設置了全局的默認等待提示框文本,甚至可以直接啟動:
WaitDialog.showWaitWithDefaultText();
WaitDialog 在顯示後會持續運行,直到彈出一個提示框 TipDialog 或者使用.dismiss()
方法關閉它。
以下是一個最簡單的例子,程序會在運行 2 秒後自動關閉 WaitDialog:
WaitDialog.show("Please Wait!");
new Handler(Looper.getMainLooper()).postDelayed(new Runnable() {
@Override
public void run() {
WaitDialog.dismiss();
}
}, 2000);
若要修改已經顯示的 WaitDialog 的文字,可以直接重新執行 WaitDialog.show("其他文字");
即可。
提示框 TipDialog 分為三種樣式,完成(SUCCESS)、警告(WARNING)和錯誤(ERROR)
TipDialog 實際上是 WaitDialog 的代理類,WaitDialog 在啟動後至關閉前都只會有一個實例,因此在 WaitDialog 顯示過程中執行 TipDialog 就會中斷等待框的顯示,轉而銜接顯示一個提示框,除此之外,TipDialog 也可以單獨執行顯示。
提示框的銜接是有線條動畫效果的,若 WaitDialog 正在顯示時,在執行 TipDialog 的顯示指令後不一定會立即顯示提示框,可能會等待動畫可以銜接時才會轉而顯示 TipDialog。
使用以下代碼顯示一個完成等待框:
TipDialog.show("Success!", WaitDialog.TYPE.SUCCESS);
如果設置了全局的默認提示框文本,甚至可以直接啟動:
TipDialog.showTipWithDefaultText(WaitDialog.TYPE.SUCCESS);
另有警告框和錯誤框狀態可選:
//警告
TipDialog.show("Warning!", WaitDialog.TYPE.WARNING);
//錯誤
TipDialog.show("Error!", WaitDialog.TYPE.ERROR);
提示框預設在顯示 1.5 秒後會自動消失,你可以透過以下方法來自訂顯示時間(毫秒):
TipDialog.show("Success!", WaitDialog.TYPE.SUCCESS, 3500);
進度提示可以以一個圓環為表現可視化展示當前的流程進度。
因為準確度要求,進度提示開始時不會有過渡動畫。
使用以下代碼顯示一個進度框:
WaitDialog.show("正在載入...", 0.1f);
第二個浮點型的參數即進度,取值範圍為0f ~ 1f,會由上一個進度平滑過渡到下一個設定的進度,也可以反向進行進行減少。
要顯示一個傳統的對話框進度條(例如下載更新的場景),請參閱 《常見問題:Q:如何實現傳統的進度條對話框?》
等待框 WaitDialog 和提示框 TipDialog 可以通過設置 .setDialogLifecycleCallback(...)
設置生命週期事件回調:
TipDialog.show("Success!", WaitDialog.TYPE.SUCCESS)
.setDialogLifecycleCallback(new DialogLifecycleCallback<WaitDialog>() {
@Override
public void onShow(WaitDialog dialog) {
//對話框啟動時回調
}
@Override
public void onDismiss(WaitDialog dialog) {
//對話框關閉時回調
}
});
你也可以使用方法 .onShow(DialogXRunnable)
和 .onDismiss(DialogXRunnable)
,來處理生命週期事務,例如:
WaitDialog.show("please wait...")
.onShow(new DialogXRunnable<WaitDialog>() {
@Override
public void run(WaitDialog dialog) {
//WaitDialog show!
}
})
.onDismiss(new DialogXRunnable<WaitDialog>() {
@Override
public void run(WaitDialog dialog) {
//WaitDialog dismiss!
}
});
WaitDialog/TipDialog 也支持 Lifecycle,你可以使用 .getLifecycle()
獲取 Lifecycle 對象。
等待框 WaitDialog 和提示框 TipDialog 可以通過設置 .setDialogLifecycleCallback(...)
設置當用戶按下系統返回鍵時的事件處理:
WaitDialog.show("Please Wait!").setOnBackPressedListener(new OnBackPressedListener() {
@Override
public boolean onBackPressed() {
toast("按下返回");
return false;
}
});
從上述代碼可以看到onBackPressed()
方法是有一個回調值,當return true
時可以自動關閉等待/提示對話框。
WaitDialog 和 TipDialog 也支持自訂布局樣式,使用方式與基本消息對話框相同:
WaitDialog.show("Please Wait!").setCustomView(new OnBindView<WaitDialog>(R.layout.layout_custom_view) {
@Override
public void onBind(WaitDialog dialog, View v) {
}
});
在啟用自訂布局後,WaitDialog 和 TipDialog 自身的動畫布局將會隱藏。
WaitDialog.show("請稍後...")
//設置入場動畫資源和出場動畫資源
.setAnimResId(R.anim.anim_dialogx_bottom_enter, R.anim.anim_dialogx_bottom_exit);
要自訂動畫文件,可以參考:預設對話框啟動動畫文件和預設對話框關閉動畫文件
額外說明,除了 .setAnimResId(enterAnimResId, exitAnimResId)
外,還有 .setEnterAnimResId(enterAnimResId)
和 .setExitAnimResId(enterAnimResId)
單獨方法可選,此方法僅針對單次顯示的對話框有效。
另外你也可以通過 setEnterAnimDuration([long])
設置入場動畫時長以及通過 .setExitAnimDuration([long])
設置關閉動畫時長。
你可以通過靜態屬性直接修改全局 WaitDialog 的動畫:
//設置全局 PopTip入場動畫
WaitDialog.overrideEnterAnimRes = R.anim.anim_dialogx_bottom_enter;
//設置全局 PopTip出場動畫
WaitDialog.overrideExitAnimRes = R.anim.anim_dialogx_bottom_exit;
//設置全局 PopTip入場動畫時間
WaitDialog.overrideEnterDuration = 1000;
//設置全局 PopTip出場動畫時間
WaitDialog.overrideExitDuration = 1000;
您還可以通過參考自訂主題介面,完全訂製全局的動畫框默認動畫效果,具體請查閱 《自訂 DialogX 主題》
請注意這三種設置是由優先度區別的,針對單次顯示的對話框動畫修改優先度 > 對 WaitDialog、TipDialog 全局生效的的動畫修改 > 自訂主題修改。
//強制重新刷新界面
.refreshUI();
//關閉對話框
.dismiss();
//獲取對話框實例化對象,您可以透過此方法更深度的訂製Dialog的功能
.getDialogImpl()
//獲取自訂布局實例
.getCustomView()
//設置背景顏色,強行對對話框背景進行染色,請注意參數為int類型的顏色值而非R.color的索引
.setBackgroundColor(ColorInt);
//設置對話框圓角(會裁切內容顯示)
.setRadius(float px)
//是否處於顯示狀態
.isShow()
//置頂對話框
.bringToFront()
//指定對話框顯示層級
.setThisOrderIndex(int)
TipDialog 在展示提示時會有振動回饋,受以下屬性控制影響:
//使用振動回饋
DialogX.useHaptic = true;
WaitDialog 支持修改背景遮罩,這是為了豐富擴展性。如果需要背景遮罩,您可以自行使用如下代碼設置:
WaitDialog.show(...).setMaskColor(colorInt);
請注意,傳入參數為 ColorInt 值,您可以使用 Color.parseColor("#4D000000")
設置一個 HEX 色值,或使用 getResources().getColor(R.color.black30)
設置一個顏色的資源值。
默認情況下,使用 Material 動畫的主題時,從 等待狀態 到 提示狀態(完成、警告、錯誤) 是需要等待一段時間以完成動畫的銜接,最大時長取決於當前等待動畫轉到的進度,如果需要去掉動畫銜接效果,以達到快速響應,您可以使用 NoArticulatedProgressView
來實現對默認等待提示動畫的替換:
在您設置 DialogX 的主題時,請重寫 overrideWaitTipRes
相關設置:
DialogX.globalStyle = new MaterialStyle(){
@Override
public WaitTipRes overrideWaitTipRes() {
return new WaitTipRes() {
@Override
public ProgressViewInterface overrideWaitView(Context context, boolean light) {
return new NoArticulatedProgressView(context); //重要!
}
};
}
};
NoArticulatedProgressView 是自帶組件,只需要引入 import com.kongzue.dialogx.util.views.NoArticulatedProgressView;
即可