android - 覆盖菜单长按以显示应用程序主屏幕并正常按下以显示菜单

时间:2011-06-03 17:34:33

标签: android menu keypress

我正在尝试获取菜单键以显示以下内容:

  1. 长按以显示我应用的主屏幕(而不是默认的软键盘)
  2. 正常按下以显示菜单。
  3. 我可以做任何一种,但不能同时做到。我错过了什么?一些代码将非常感激。

    谢谢

    这就是我所拥有的:

      @Override
        public boolean onKeyDown(int keyCode, KeyEvent event)  
        {   
         if (keyCode == KeyEvent.KEYCODE_MENU) 
         {
          event.startTracking();
          return true;
         }
    
     return super.onKeyDown(keyCode, event);
    }
    
    @Override
    public boolean onKeyUp(int keyCode, KeyEvent event)
    {
       if (keyCode == KeyEvent.KEYCODE_MENU && event.isTracking() && !event.isCanceled())
       {
          this.openOptionsMenu();
       }
       return super.onKeyUp(keyCode,event);
    }
    
    
     @Override
        public boolean onKeyLongPress(int keyCode, KeyEvent event)
        {
            if (keyCode == KeyEvent.KEYCODE_MENU){
    
                if ( _activityId != WndId.Home)
                {
                    navigateHome(NavDirection.Up);
                    return (true);
                }
            }
            return super.onKeyLongPress(keyCode,event);
        }
    @Override
        public boolean onCreateOptionsMenu(Menu menu) {
            MenuInflater inflater = getMenuInflater();
            inflater.inflate(R.menu.muve_menu, menu);
            return true;
        }
    

2 个答案:

答案 0 :(得分:1)

所以如果你调用this.openOptionsMenu();在onKeyUp()中,您可以在常规屏幕上显示菜单,并通过重定向到主屏幕来覆盖软键盘。

答案 1 :(得分:0)

我怀疑当你说“可以做或不做两者”时,你的意思是如果你覆盖onKeyUp你没有看到onKeyLongPress?如果是这样,那是因为,长按的关键事件也经历onKeyUp(可能在他们到达onKeyLongPress之前)并且你返回true表示你的代码已经处理它 - 因此它永远不会到达onKeyLongPress。

文档说

“每次按键都由一系列按键事件描述。按键按下以ACTION_DOWN按键事件开始。如果按键保持足够长以使其重复,则初始向下按下ACTION_DOWN后的其他按键事件。 getRepeatCount()的非零值。最后一个关键事件是关键字的ACTION_UP。“

因此,如果您想要区分短按菜单和长按菜单,您还必须监视onKeyDown并区分多个ACTION_DOWN。