一、在如下处添加打印可以确认当前焦点位置
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需要的响应。