Android的dialog控制焦点导致其后Activity不响应

一、在如下处添加打印可以确认当前焦点位置

frameworks/base/core/java/android/view/ViewGroup.java  //分发给View的关键部分!!!

    @Override
    public boolean dispatchKeyEvent(KeyEvent event) {
        if (mInputEventConsistencyVerifier != null) {
            mInputEventConsistencyVerifier.onKeyEvent(event, 1);
        }

        if ((mPrivateFlags & (PFLAG_FOCUSED | PFLAG_HAS_BOUNDS))
                == (PFLAG_FOCUSED | PFLAG_HAS_BOUNDS)) {
            Log.d("TKTK","TK------ViewGroup,java--->>>>>>nofacus");//add by tank
            if (super.dispatchKeyEvent(event)) {
                return true;
            }
        } else if (mFocused != null && (mFocused.mPrivateFlags & PFLAG_HAS_BOUNDS)
                == PFLAG_HAS_BOUNDS) {
            Log.d("TKTK","TK------ViewGroup,java--->>>>>>mFocused is " + mFocused);//add by tank
            if (mFocused.dispatchKeyEvent(event)) {
                return true;
            }
        }

        if (mInputEventConsistencyVerifier != null) {
            mInputEventConsistencyVerifier.onUnhandledEvent(event, 1);
        }
        return false;
    }

二、修改方法

public MenuDialog(Context context, int theme) {
  super(context, theme);
  WindowManager.LayoutParams lp =  new LayoutParams(  
	                LayoutParams.WRAP_CONTENT| LayoutParams.TYPE_SYSTEM_ERROR|   
	                LayoutParams.FLAG_NOT_FOCUSABLE| PixelFormat.TRANSPARENT);   
  lp.type = WindowManager.LayoutParams.TYPE_TOAST;
  //WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE是关键!!!!!
  lp.flags =  WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL | WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE ; 
  lp.gravity = Gravity.RIGHT;
  lp.alpha=1f;
  lp.x = -200;
  lp.width = 0;
  lp.height = 0;
  lp.dimAmount = 1.0f;   
  requestWindowFeature(Window.FEATURE_NO_TITLE);
  getWindow().setAttributes(lp);
  Window window = this.getWindow(); 
  window.setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN);  
  window.setLayout(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);  
  this.setContentView(R.layout.main); 
  Utils.logger("Dialog初始完成"); 
}
三、简单说明

dialog启动时默认会最高优先级获取焦点;并且只有当其退出时,才会释放。

我们的需求:

dialog不响应按键;通过广播响应。其后是TV的Activity,按键由TV的Activity响应。

问题:

dialog拦截了我们TV的Activity需要的响应。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值