如何访问菜单按钮onLongClick在Android的?(How to access menu b

2019-09-17 17:31发布

我如何设置长按硬件菜单按钮进行监听? 什么是编程访问菜单按钮的方式吗?

而且我怎么能区分长单击单单击? (据我所知当执行长单击单单击事件被传播,以及 - 我不希望这种情况发生,因为我需要这2分的情况下2分不同的动作长按和单点击单独的侦听器装置菜单按钮)

谢谢!

Answer 1:

这shoule是相当简单的。 退房KeyEvent.Callback在Android开发者网站。

在那里,你会发现onKeyLongPress()以及onKeyDown()onKeyUp() 这应该让你在正确的轨道上。 注释或者,如果您需要任何进一步的帮助后你的代码。

编辑:我只是重新阅读问题。 如果您无法从长按区分单一的点击,您将需要使用onKeyDownonKeyUp并查看点击的持续时间。 Esentially你会开始在计时器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);
}


文章来源: How to access menu button onLongClick in Android?