Dialog
Dialog
Dialog 基础
Dialog 监听 Back 返回键点击事件
1
2
3
4
5
6
7
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
- 思路:
采用责任链,每个弹窗都是一条链的一个点,链前面的弹窗优先展示,当前弹出展示完毕后,展示链上的下一个弹窗 - 缺点:
初始化时,需要把所有的弹窗都用一条链起来,不能动态的添加弹窗 - 用更优雅的技术方案实现应用多弹窗效果
https://mp.weixin.qq.com/s/5DmOCHoslId1IUAWoqwUbw
DialogQueue
本文由作者按照 CC BY 4.0 进行授权