我可以在自定义ViewGroup中获取onBackPressed事件吗?

时间:2012-08-13 09:01:34

标签: android android-layout custom-component

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

编辑: 我尝试重写onKeyPreIme,因为Android文档暗示,该方法永远不会从ViewGroup中调用。

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

onKeyPreIme 文档中,它说:

  

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

2 个答案:

答案 0 :(得分:9)

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

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

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

答案 1 :(得分:2)

onBackPressed 属于Activity,而views / viewgroups属于Activity。从技术上讲,你不能完成这件事。但是,您可以使用某种 observer/observable 模式将任何类型的信息传递给您的观看。

或者尝试在您的视图类中使用 onKeyDown 事件并跟踪back key事件代码。