android焦点优先级的控制,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需要的响应。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值