2

我正在创建一个自定义的 Android 组件,该组件有时需要使用 onBackPressed 事件(例如,自定义 ViewGroup 中有一个弹出菜单,如果它正在显示,则返回按钮事件将其关闭并被使用,否则将被忽略)。那可能吗?我可以从我的 ViewGroup 子类中拦截此事件吗?如何拦截?

编辑:我尝试像 Android 文档所暗示的那样覆盖 onKeyPreIme,该方法永远不会从 ViewGroup 中调用。

@Override
public boolean onKeyPreIme(int keyCode, KeyEvent event)
{
     return true;
}

onKeyPreIme文档中它说:

在与视图层次结构关联的任何输入方法处理键事件之前处理它。这可以用于在 IME 消费之前拦截特殊情况下的关键事件;一个典型的例子是处理 BACK 键来更新应用程序的 UI,而不是让 IME 看到它并自行关闭。

4

2 回答 2

9

永远不会调用 onKeyDown 或 onKeyPreIme 的原因是因为 ViewGroup 没有焦点。

解决方案是在 ViewGroup 子类的构造函数中请求焦点:

this.setFocusable(true);
this.setFocusableInTouchMode(true);
this.requestFocus();
于 2012-08-16T20:11:20.837 回答
2

onBackPressed属于 Activity,视图/视图组是放置在 Activity 内的东西。所以从技术上讲,你无法完成这项工作。但是,您可以使用某种观察者/可观察模式将任何类型的信息传递给您的视图。

或者尝试在视图类中使用onKeyDown事件并跟踪返回键事件代码。

于 2012-08-13T09:08:32.463 回答