【问题标题】:Key Events in TabActivities?TabActivity 中的关键事件?
【发布时间】:2011-02-17 06:31:03
【问题描述】:

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

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

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

    return super.onKeyDown(keyCode, event);
}

没用。

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

【问题讨论】:

    标签: android keyevent


    【解决方案1】:

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

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

    然后在TabActivity中做真正的逻辑:

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

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

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          【解决方案4】:

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

          你永远不能“处理 HOME 的压力”。

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

          【讨论】:

          • 我正在为 1.5 开发,所以我将覆盖 onKeyDown()。我正在为每个选项卡使用活动,甚至尝试在我的一个特定选项卡活动中覆盖。然而,它仍然没有触发那里的onKeyDown() 函数。
          • 那么我不知道。考虑切换到将视图而不是活动作为选项卡的内容。这不仅会节省大量系统资源,而且还应该简化关键事件流,这样您的 TabActivity 就会得到onKeyDown() 调用。
          • 我们找到了一种处理 Home 事件的方法,它的 here
          【解决方案5】:

          在你的oncreate()试试这个

          setDefaultKeyMode(DEFAULT_KEYS_SEARCH_LOCAL);
          setDefaultKeyMode(DEFAULT_KEYS_SEARCH_GLOBAL);
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2015-05-29
            • 2013-02-06
            • 1970-01-01
            • 2016-06-06
            相关资源
            最近更新 更多