Dialog 基础
Dialog 监听 Back 返回键点击事件
mProgressDialog.setOnKeyListener((dialog, keyCode, event) -> {
if (keyCode == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_UP
&& event.getRepeatCount() == 0) {
return listener.onBackPressed();
}
return false;
});
- 判断 keyCode == KeyEvent.KEYCODE_BACK
- 判断 event 为 KeyEvent.ACTION_UP,因为还有 ACTION_DOWN,否则执行多次
- 判断
vent.getRepeatCount()==0;返回键在系统分发时,发送 Message 去调用 KeyEvent.changeTimeRepeat。长按时会发多次 KeyEvent.ACTION_DOWN。第一次 event.getRepeatCount() 为返回 0,之后递增。避免长按多次调用 onKeyDown 添加 repeatCount == 0 判断
App 首页弹窗多个 Dialog 优先级问题
mashi DialogController
- 思路:
DialogController 提供一个 PriorityBlockingQueue 优先级队列来存储
DialogChain
DialogQueue
https://github.com/aitsuki/DialogQueue