我正在尝试获取菜单键以显示以下内容:
我可以做任何一种,但不能同时做到。我错过了什么?一些代码将非常感激。
谢谢
这就是我所拥有的:
@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;
}
答案 0 :(得分:1)
所以如果你调用this.openOptionsMenu();在onKeyUp()中,您可以在常规屏幕上显示菜单,并通过重定向到主屏幕来覆盖软键盘。
答案 1 :(得分:0)
我怀疑当你说“可以做或不做两者”时,你的意思是如果你覆盖onKeyUp你没有看到onKeyLongPress?如果是这样,那是因为,长按的关键事件也经历onKeyUp(可能在他们到达onKeyLongPress之前)并且你返回true表示你的代码已经处理它 - 因此它永远不会到达onKeyLongPress。
文档说
“每次按键都由一系列按键事件描述。按键按下以ACTION_DOWN按键事件开始。如果按键保持足够长以使其重复,则初始向下按下ACTION_DOWN后的其他按键事件。 getRepeatCount()的非零值。最后一个关键事件是关键字的ACTION_UP。“
因此,如果您想要区分短按菜单和长按菜单,您还必须监视onKeyDown并区分多个ACTION_DOWN。