如何设置侦听器以在硬件菜单按钮上执行长按?以编程方式访问菜单按钮的方式是什么?
此外,如何区分长按和单击?(据我所知,当执行长按时,单击事件也会传播 - 我不希望发生这种情况,因为我需要针对这两种情况采取 2 种不同的操作。长按和单击单独的侦听器设备菜单按钮)
谢谢!
如何设置侦听器以在硬件菜单按钮上执行长按?以编程方式访问菜单按钮的方式是什么?
此外,如何区分长按和单击?(据我所知,当执行长按时,单击事件也会传播 - 我不希望发生这种情况,因为我需要针对这两种情况采取 2 种不同的操作。长按和单击单独的侦听器设备菜单按钮)
谢谢!
这应该是相当直截了当的。查看Android 开发者网站上的KeyEvent.Callback 。
在那里你会发现onKeyLongPress()
以及onKeyDown()
和onKeyUp()
。这应该让你走上正确的轨道。如果您需要任何进一步的帮助,请评论或发布您的代码。
编辑:我刚刚重新阅读了这个问题。如果您无法区分单击和长按,则需要使用onKeyDown
和onKeyUp
检查单击的持续时间。基本上,您将在 中启动一个计时器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);
}