在Android中检测物理菜单键按下

Ent*_*024 40 android button

我试图检测Android手机上的物理菜单按钮何时被按下.我虽然下面的代码可以工作,但事实并非如此.我哪里出错了?

返回的错误是'onKeyDown参数的非法修饰符; 只允许决赛'

public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_MENU) {
        // Do Stuff
    } else {
        return super.onKeyDown(keyCode, event);
    }
}
Run Code Online (Sandbox Code Playgroud)

SK9*_*SK9 82

我想寻找一个向上的关键事件,而不是向下的事件,有onKeyUp.

public boolean onKeyUp(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_MENU) {
        // ........
        return true;
    }
    return super.onKeyUp(keyCode, event);
}
Run Code Online (Sandbox Code Playgroud)

我们回来true是因为我们正在处理这个事件; false如果您希望系统也处理该事件,请返回.

您也可以在您的Activity实例中执行所有这些操作,因为Activity它是已知的间接子类KeyEvent.


mbo*_*ess 11

基于以上所有内容,这似乎是正确的实现,它将仅使用菜单键"up"事件并将其他键事件传递给超类.

public boolean onKeyUp(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_MENU) {
        // ...
        return true;
    } else {
        return super.onKeyUp(keyCode, event);
    }
}
Run Code Online (Sandbox Code Playgroud)


小智 5

public boolean onKeyDown(int keyCode, KeyEvent event) { 
    //Checking for the "menu" key
    if (keyCode == KeyEvent.KEYCODE_MENU) { 
        if (mDrawerLayout.isDrawerOpen(mDrawerList)) {
            mDrawerLayout.closeDrawers();
        } else {
            mDrawerLayout.openDrawer(Gravity.RIGHT);
        }
        return true;
    } else {
        return super.onKeyDown(keyCode, event);
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 最好解释一下你的代码. (4认同)

小智 0

如果您确实处理了该事件,则返回 true,如果您没有返回 false,则 Android 系统可以将该事件传递给其余组件来处理它。