将onKeyDown
与KEYCODE_MENU
一起使用,但只能使用KEYCODE_SEARCH
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
switch(keyCode){
case KeyEvent.KEYCODE_MENU:
Toast.makeText(this, "Menu key pressed", Toast.LENGTH_SHORT).show();
return false;
case KeyEvent.KEYCODE_SEARCH:
Toast.makeText(this, "Search key pressed", Toast.LENGTH_SHORT).show();
return false;
}
return super.onKeyDown(keyCode, event);
}
我认为有一些处理菜单键的东西所以它不会听我的代码
我试过像这样解读onCreateOptionsMenu
:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
return true;
}
但仍然没有工作..
因此,任何使菜单按钮听取onKeyDown
??
答案 0 :(得分:1)
这可能是appcompat v22中的错误。见https://code.google.com/p/android/issues/detail?id=159795
该线程中发布的解决方法是覆盖dispatchKeyEvent:
@Override
public boolean dispatchKeyEvent(KeyEvent event) {
int keyCode = event.getKeyCode();
int action = event.getAction();
boolean isDown = action == 0;
if (keyCode == KeyEvent.KEYCODE_MENU) {
return isDown ? this.onKeyDown(keyCode, event) : this.onKeyUp(keyCode, event);
}
return super.dispatchKeyEvent(event);
}
答案 1 :(得分:0)
你在使用什么设备和操作系统?
您可能希望将compat库更新为最新版本.. 23.0.0
答案 2 :(得分:0)
即使使用Setup Box和Android TV
您可以在dispatchKeyEvent
中使用Activity
,然后检测到您想要的任何键
@Override
public boolean dispatchKeyEvent(KeyEvent event) {
int code = event.getKeyCode();
int action = event.getAction();
boolean isDown = action == 0;
if (code == KeyEvent.KEYCODE_MENU) {
Toast.makeText(this, "Menu Is Selected", Toast.LENGTH_SHORT).show();
}
return super.dispatchKeyEvent(event);
}