【问题标题】:Android AlertDialog leftover window blocking input after dismissAndroid AlertDialog 剩余窗口在关闭后阻止输入
【发布时间】:2017-08-29 14:41:56
【问题描述】:

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

目前我在调试遇到的这个问题时遇到了麻烦: 如果我打开并关闭我的对话框 2 次,则窗口会泄漏,从而阻止 Amazon 远程输入事件。然后我需要按下返回按钮(关闭窗口),应用才能再次正确反应。

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

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

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),我将其用作我显示的每个警报对话框的上下文。我没有使用 DialogFragments,因为我不需要对弹出菜单进行花哨的生命周期处理。

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

【问题讨论】:

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


    【解决方案1】:

    于是我找到了问题的原因:

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

    Logn 简而言之:消费关键事件后总是返回 true ;)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-05
      • 1970-01-01
      • 2020-06-06
      • 2016-04-15
      • 1970-01-01
      • 2014-03-17
      相关资源
      最近更新 更多