我如何设置长按硬件菜单按钮进行监听? 什么是编程访问菜单按钮的方式吗?
而且我怎么能区分长单击单单击? (据我所知当执行长单击单单击事件被传播,以及 - 我不希望这种情况发生,因为我需要这2分的情况下2分不同的动作长按和单点击单独的侦听器装置菜单按钮)
谢谢!
我如何设置长按硬件菜单按钮进行监听? 什么是编程访问菜单按钮的方式吗?
而且我怎么能区分长单击单单击? (据我所知当执行长单击单单击事件被传播,以及 - 我不希望这种情况发生,因为我需要这2分的情况下2分不同的动作长按和单点击单独的侦听器装置菜单按钮)
谢谢!
这shoule是相当简单的。 退房KeyEvent.Callback在Android开发者网站。
在那里,你会发现onKeyLongPress()
以及onKeyDown()
和onKeyUp()
这应该让你在正确的轨道上。 注释或者,如果您需要任何进一步的帮助后你的代码。
编辑:我只是重新阅读问题。 如果您无法从长按区分单一的点击,您将需要使用onKeyDown
和onKeyUp
并查看点击的持续时间。 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);
}