我正在尝试实现长按键识别,我已经覆盖了onKeyDown
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
// event.startTracking();
if (backPressedStarted == -1) {
progressBar.setProgress(0);
progressBar.setVisibility(View.VISIBLE);
backPressedStarted = System.currentTimeMillis();
} else {
int pressDuration = (int) (System.currentTimeMillis() - backPressedStarted);
progressBar.setProgress(pressDuration);
if (pressDuration > 5000)
showExitDialog();
}
return true;
}
return super.onKeyDown(keyCode, event);
}
在~3.8秒后,系统调度带有标志的onKeyUp事件:FLAG_CANCELED
我已经尝试忽略它并在key up方法中返回true或false但它似乎不起作用...
有解决方法吗?我可以定义最长的印刷时间吗?
== UPDATE ==
好的,所以当我删除事件跟踪的注释时,会调用长按回调,然后返回true或false仍然不会改变keyUp在这段时间后取消的最终结果。
感谢。
答案 0 :(得分:0)
在挖掘并尝试多种方法试图覆盖它之后(除了注入我自己的自定义触摸事件,我不想管理这个黑客),我发现这是不可能避免这个“特征”。
我的解决方案是将时间从5000毫秒缩短到3000毫秒,并允许另一个退出模式作为这一部分的一面,对于那些操作系统的设备可能会让我惊讶于3000ms之前的取消事件......