解除后Android AlertDialog剩余窗口阻止输入

时间:2017-04-04 11:54:48

标签: android window focus android-support-library alertdialog

我正在开发一个依赖于自定义AlertDialogs实现的弹出菜单的Amazon FireTV应用程序。出于造型原因,我正在使用appcompat-v7:25.3.1

目前我在调试此问题时遇到问题: 如果我打开并关闭我的对话框2次窗口被泄露,阻止亚马逊远程输入事件。然后,我需要按后退按钮(关闭窗口),让应用程序再次正确反应。

查看Android Studio的LayoutInspector我可以看到第二个覆盖窗口属于此类:android.support.v7.app.AppCompatDelegateImplV9$ListMenuDecorView@1b4b8967

logcat显示以下条目(按“Window”过滤)

04-04 13:49:28.429 1906-2324/? V/WindowManager: not Base app: Adding window 
Window{3663d4c0 u0 foo.bar/foo.bar.MainActivity} at 5 of 7
04-04 13:49:29.650 1906-2366/? W/InputMethodManagerService: Window already focused, ignoring focus gain of: com.android.internal.view.IInputMethodClient$Stub$Proxy@36117cec attribute=null, token = android.os.BinderProxy@348376a7
04-04 13:49:30.732 1906-2348/? V/WindowManager: not Base app: Adding window Window{2b864b4a u0 foo.bar/foo.bar.MainActivity} at 5 of 7
04-04 13:49:30.732 1906-2378/? V/WindowManager: Adding window Window{300f7bd8 u0 SubPanel:foo.bar/foo.bar.MainActivity} at 5 of 8 (after Window{164a9754 u0 foo.bar/foo.bar.MainActivity})

我正在完成一项活动(MainActivity)的所有工作,我将其用作每个alertdialog i show的上下文。我没有使用DialogFragments,因为我不需要花哨的生命周期处理弹出菜单。

如果有人能指出我正确的方向,我会很高兴的!

1 个答案:

答案 0 :(得分:0)

所以我找到了问题的原因:

我忘记在收到菜单按钮事件后返回true,这意味着没有将其标记为已消耗。由于我使用AppCompatActivity而没有设置或显示操作栏由于某种原因appcompat试图显示一个菜单并在顶部覆盖一个透明窗口,然后在解除对话框后仍然可见。

Logn story short:在消耗关键事件后总是返回true;)