4

我有一个 TabActivity,想要捕捉和处理 HOME 和 BACK 的按下。我需要在哪里捕捉这些事件?

在我的 TabActivity 子类中,我实现了以下内容:

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    switch (keyCode) {
        // Code handling
    }

    return super.onKeyDown(keyCode, event);
}

没用。

所以我在 switch 语句行上放了一个断点。但是这个函数永远不会被调用,无论我是按音量增大/减小、菜单、主页还是返回。我需要在哪里捕获这些 KeyEvent?

4

5 回答 5

29

事实证明这很容易。将以下代码添加到您的子选项卡活动:

 @Override
  public void onBackPressed() {
    this.getParent().onBackPressed();   
  }

然后在 TabActivity 中执行真正的逻辑:

 @Override
  public void onBackPressed() {
    // Called by children
  }

否则,孩子会在不通知标签宿主的情况下拦截并消费事件。

于 2011-06-28T18:53:20.843 回答
5

我遇到了同样的问题,发现覆盖 dispatchKeyEvent 有效。

可以在此处找到后退按钮按下的示例:

http://android-developers.blogspot.com/2009/12/back-and-other-hard-keys-three-stories.html

于 2010-12-20T16:51:34.840 回答
2

每个选项卡的 Activity 处理“后退”压力。

于 2010-05-27T23:57:52.253 回答
0

我有一个 TabActivity,想要捕捉和处理 HOME 和 BACK 的按下。我需要在哪里捕捉这些事件?

您永远无法“处理 HOME 压力机”。

关于 BACK,您可以使用onKeyDown()(for Android 1.x) 或onBackPressed()(for Android 2.x)。但是,您TabActivity可能为时已晚。例如,如果您将活动作为选项卡的内容,则可能其中之一正在捕捉 BACK 按下并安排正常处理(即关闭活动)。由于我避免像瘟疫那样将活动作为标签(除了一本书的示例),因此我没有在那种情况下尝试过 BACK 按钮处理。

于 2010-05-09T00:49:47.940 回答
0

试试这个oncreate()

setDefaultKeyMode(DEFAULT_KEYS_SEARCH_LOCAL);
setDefaultKeyMode(DEFAULT_KEYS_SEARCH_GLOBAL);
于 2012-05-14T08:11:12.287 回答