AndroidTV 6.0 PopupWindow返回键问题

记录一下:

问题描述:通过popupwindow创建三个view,每个view都是可以获取焦点,操作onkeyListener事件,监听back键,加一下动画效果,动画结束之后才dismiss;

android版本:

popupwindow源码分析:https://blog.csdn.net/zwluoyuxi/article/details/73977651

1.android 6.0及以上:PopupDecorView (现在使用的6.0版本)点击返回键并没有执行动画,而是直接dismiss

2.android 6.0以下: PopupViewContainer   没有问题

分析下:下面的的代码在6.0版本, 5.1版本是一样的,

@Override
public boolean dispatchKeyEvent(KeyEvent event) {
    if (event.getKeyCode() == KeyEvent.KEYCODE_BACK) {
        if (getKeyDispatcherState() == null) {
            return super.dispatchKeyEvent(event);
        }

        if (event.getAction() == KeyEvent.ACTION_DOWN
                && event.getRepeatCount() == 0) {
            KeyEvent.DispatcherState state = getKeyDispatcherState();
            if (state != null) {
                state.startTracking(event, this);
            }
            return true;
        } else if (event.getAction() == KeyEvent.ACTION_UP) {
            KeyEvent.DispatcherState state = getKeyDispatcherState();
            if (state != null && state.isTracking(event) && !event.isCanceled()) {
                dismiss();
                return true;
            }
        }
        return super.dispatchKeyEvent(event);
    } else {
        return super.dispatchKeyEvent(event);
    }
}

修改逻辑:重写dismiss()

在6.0版本中view中返回键是KeyEvent.ACTION_UP直接dismiss,  所以动画效果在重写dismiss()中操作,而本身的dismiss()需要重写个方法

public void onDismiss(){
   super.dismiss();
}

@Override
public void dismiss() {
    if(Build.VERSION.SDK_INT <= 22){
        super.dismiss();
    }else{
        //操作
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值