Android 使用WindowManager添加视图时如何处理keyevents?

Android 使用WindowManager添加视图时如何处理keyevents?,android,Android,我用WindowManager添加了一个自定义视图,一切正常。 只有一个问题:我找不到在哪里捕捉按键事件,例如按下“后退”。 我在自定义视图中的方法“View.dispatchKeyEvent()”中捕获了一些事件,但不包括“BACK”或“HOME”。 有什么建议吗? 非常感谢 我的代码如下所示: // get WindowManager WindowManager windowManager = (WindowManager) getContext() .getSystemService

我用WindowManager添加了一个自定义视图,一切正常。 只有一个问题:我找不到在哪里捕捉按键事件,例如按下“后退”。 我在自定义视图中的方法“View.dispatchKeyEvent()”中捕获了一些事件,但不包括“BACK”或“HOME”。 有什么建议吗? 非常感谢

我的代码如下所示:

// get WindowManager

WindowManager windowManager = (WindowManager) getContext()
  .getSystemService(Context.WINDOW_SERVICE);

// set LayoutParams

WindowManager.LayoutParams wmparams = new WindowManager.LayoutParams(
  WindowManager.LayoutParams.WRAP_CONTENT,
  WindowManager.LayoutParams.WRAP_CONTENT);

wmparams.flags = WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL;

wmparams.format = PixelFormat.TRANSLUCENT;

wmparams.windowAnimations = R.style.fade;

// add this view to screen

windowManager.addView(this, wmparams);

this.setOnKeyListener(new OnKeyListener() {

 @Override
 public boolean onKey(View v, int keyCode, KeyEvent event) {
  // cannot get 'BACK' pressed event here
  return false;
 }
});

在添加到windowmanager的视图中,让我们添加以下内容

    root.setOnKeyListener(this);
    root.requestFocus();
    root.setFocusable(true);
    root.setFocusableInTouchMode(true);
我在windowmanager中进行了测试,它运行良好

FrameLayout view = new FrameLayout(getActivity()) {
    @Override
    public boolean dispatchKeyEvent(KeyEvent event) {
        if (event.getKeyCode() == KeyEvent.KEYCODE_BACK) {
            // do you code
            return true;
        }
        return super.dispatchKeyEvent(event);
    }
};
不设置标志:

WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE 

索莱维德。只需在该视图的dispatchKeyEvent()方法中捕获事件。可以显示代码吗please@Anthone对不起,伙计,时间太长了,我现在没有密码。但是很简单,只需重写dispatchKeyEvent()方法并在调用super.dispatchKeyEvent()之前编写代码。