我需要显示一个等待手柄按键的首选项对话框。
我知道 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,那么我只能获得模拟方向杆事件,但不能获得左/右模拟触发事件。
有人知道为什么以及如何解决这种行为吗?