Android - onKeyDown无法使用KEYCODE_MENU

时间:2015-09-18 03:03:33

标签: java android android-studio

onKeyDownKEYCODE_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 ??

的想法

3 个答案:

答案 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);
    }

修改:请参阅Upgraded to AppCompat v22.1.0 and now onKeyDown and onKeyUp are not triggered when menu key is pressed

答案 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);
}