Android的dialog控制焦点导致其后Activity不响应
2015-01-09 19:05
393 查看
一、在如下处添加打印可以确认当前焦点位置
frameworks/base/core/java/android/view/ViewGroup.java //分发给View的关键部分!!!
二、修改方法
dialog启动时默认会最高优先级获取焦点;并且只有当其退出时,才会释放。
我们的需求:
dialog不响应按键;通过广播响应。其后是TV的Activity,按键由TV的Activity响应。
问题:
dialog拦截了我们TV的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需要的响应。
相关文章推荐
- android弹出dialog后,activity得到焦点
- Android 后台线程弹对话框导致程序崩溃(is not valid; is your activity running)(dialog总是牺牲)
- Android自定义dialog并实现失去焦点,activity获取焦点的功能
- Android Activity使用Dialog样式导致点击空白处自动关闭的问题解决
- android的activity或dialog位置大小动态显示
- android Activity 清空焦点
- android ListView的Item中有CheckBox,导致OnItemClick不响应的解决办法
- 如何使Android dialog弹出后当前的 activity背景不变暗
- (转)Android有趣的全透明效果--Activity及Dialog的全透明
- Android有趣的全透明效果--Activity及Dialog的全透明(附android系统自带图标大全)
- android中用java代码动态控制activity的大小,位置,透明度
- OpenFileDialog.ShowDialog()导致WinForm无响应解法
- android ProgressDialo异常 no dialog with id 0 was ever shown via Activity#showDialog
- Android下Dialog及Activity屏蔽Home键详解
- Android深入探究笔记之二 -- 打开一个新的 Activity 并传递参数与如何响应控件的点击事件
- 如何控制Activity和Dialog的显示透明度
- Android中自定义Activity和Dialog的位置大小背景和透明度等
- android activity生成的dialog的显示不了的问题
- 如何利用Activity的Dialog风格完成弹出框设计 “第二届 Google 暑期大学生博客分享大赛 - 2011 Android 成长篇 ”
- Android ApiDemos详解之App/Activity/Dialog(4)