android - 使用WindowManager添加 View 时如何处理按键事件?

标签 android

我用 WindowManager 添加了自定义 View ,一切正常。 只有一个问题:我找不到在哪里可以捕捉按键事件,例如按下“BACK”。 我在自定义 View 中捕获了方法“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的 View 中,让我们添加这个

    root.setOnKeyListener(this);
    root.requestFocus();
    root.setFocusable(true);
    root.setFocusableInTouchMode(true);

我已经在 windowmanager 服务中测试过它运行良好

关于android - 使用WindowManager添加 View 时如何处理按键事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4545623/

相关文章:

android - ImageView 与 Canvas

android - admob 和统一/崩溃

android - 基于 ListItem 特定变量在 ListItem 上膨胀布局

android - 错误 : package rx. android.schedulers 不存在

java - Android Studio - 如何修复使用 flag_activity_clear_task 后后退按钮仍然有效的问题 | flag_activity_new_task?

代表匿名内部类的 Android Studio

android - PropertyChangedEventHandler 导致内存泄漏

android - 如何将 GreenDroid 添加到现有的 Android Studio 项目中?

Android Gradle 插件(警告)API 'variant.getMergeResources()' 已过时并已替换为 'variant.getMergeResourcesProvider()'

安卓 LVL - NOT_MARKET_MANAGED