如何设置在硬件菜单按钮上执行长单击的侦听器?如何编程访问菜单按钮?
此外,我如何区分长点击和单点击?(据我所知,当执行长单击时,也会传播单单击事件-我不希望发生这种情况,因为这两种情况下我需要两个不同的操作。长按和单按设备菜单按钮的单独侦听器)
谢谢您!

最佳答案

这应该是相当直接的。在android开发者的网站上查看KeyEvent.Callback
在这里您可以找到onKeyLongPress()以及onKeyDown()onKeyUp()。这会让你走上正轨。如果您需要进一步的帮助,请评论或发布您的代码。
编辑:我刚刚重读了这个问题。如果无法区分单击和长单击,则需要使用onKeyDownonKeyUp并检查单击的持续时间。本质上,您将在onKeyDown中启动计时器,并在onKeyUp中检查时间。你必须注意FLAG_CANCELED
进一步编辑:我找到时间做了几个测试。这段代码应该做你想做的事情(onKeyUp()只得到短的新闻事件,onLongPress()只得到长的新闻事件)。
这里的关键是在event.startTracking()处理程序中调用onKeyDown()
放入Activity(这也应在自定义视图中工作,但未经测试):

@Override
public boolean onKeyLongPress(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_MENU) {
        // Handle Long Press here
        Log.i("KeyCheck", "LongPress");
        return true;
    }
    return super.onKeyLongPress(keyCode, event);
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    Log.i("KeyCheck", "KeyDown" + keyCode);
    if (keyCode == KeyEvent.KEYCODE_MENU) {
        event.startTracking(); //call startTracking() to get LongPress event
        return true;
    }
    return super.onKeyDown(keyCode, event);
}
@Override
public boolean onKeyUp(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_MENU && event.isTracking()
            && !event.isCanceled()) {
        // handle regular key press here
        Log.i("KeyCheck", "KeyUp");
        return true;
    }
    return super.onKeyUp(keyCode, event);
}

关于android - 如何在Android中的LongClick上访问菜单按钮?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10867033/

10-10 09:34