文章

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;
    });
  1. 判断 keyCode == KeyEvent.KEYCODE_BACK
  2. 判断 event 为 KeyEvent.ACTION_UP,因为还有 ACTION_DOWN,否则执行多次
  3. 判断 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

https://github.com/aitsuki/DialogQueue

本文由作者按照 CC BY 4.0 进行授权