1

我需要显示一个等待手柄按键的首选项对话框。

我知道 DialogFragment 有自己的 Window,然后有自己的 onKeyListener。

通过设置这样的侦听器,我可以轻松地捕捉到手柄按下。

public class MyDialogFragment extends PreferenceDialogFragmentCompat  {

    @Override
    protected void onPrepareDialogBuilder(AlertDialog.Builder builder) {
        super.onPrepareDialogBuilder(builder);

        builder.setOnKeyListener(new DialogInterface.OnKeyListener() {
            @Override
            public boolean onKey(DialogInterface dialogInterface, int i, KeyEvent keyEvent) {

                // do stuff with intercepted key press

                return true;
            }
        });

    }
}

但是,我很难捕捉到 GenericMotionEvents。为了拦截它们,我在 Activity 类中重写了 onGenericMotionEvents 并最终通过调用 MyDialogFragment 类上的方法来转发事件。

当未显示 MyDialogFragment 时,它可以 100% 正确工作,因为当移动模拟触发器/方向杆时,我可以获得一个事件。

奇怪的是,如果显示了 MyDialogFragment,那么我只能获得模拟方向杆事件,但不能获得左/右模拟触发事件。

有人知道为什么以及如何解决这种行为吗?

4

0 回答 0