我在试着取消按键的功能。当用户按下一次时,我希望它回到上一个屏幕。但是,当长时间按下back键(比方说,两秒钟或更长时间)时,我想退出应用程序。
到目前为止,我已经在活动中重写了这两个方法:
@Override
public boolean onKeyDown( int keyCode, KeyEvent event){
if (keyCode == KeyEvent.KEYCODE_BACK) {
//manage short keypress
return true;
}
return super.onKeyDown(keyCode, event);
}
@Override
public boolean onKeyLongPress( int keyCode, KeyEvent event){
if (keyCode == KeyEvent.KEYCODE_BACK) {
//manage long keypress (different code than short one)
return true;
}
return super.onKeyLongPress(keyCode, event);
}
但从不调用
onKeyLongPress
回调,因为事件总是由onKeyDown
方法接收。这两种方法都有效吗?或者必须在
onKeyDown
中全部完成并使用重复次数/毫秒来检测它? 最佳答案
从未调用onKeyLongPress
的原因是,您在onKeyDown
中返回true,而没有告诉框架这可能是一个长按-导致keyevent停止其通过不同事件处理程序的流。
你需要做的是:
在返回true之前,请按documentation中的说明调用event.startTracking()
。
处理长压入onKeyLongPress
。
按以下步骤实施,它将起作用:
@Override
public boolean onKeyDown( int keyCode, KeyEvent event ) {
if( keyCode == KeyEvent.KEYCODE_BACK ) {
event.startTracking();
return true;
}
return super.onKeyDown( keyCode, event );
}
@Override
public boolean onKeyUp( int keyCode, KeyEvent event ) {
if( keyCode == KeyEvent.KEYCODE_BACK ) {
//Handle what you want on short press.
return true;
}
return super.onKeyUp( keyCode, event );
}
@Override
public boolean onKeyLongPress( int keyCode, KeyEvent event ) {
if( keyCode == KeyEvent.KEYCODE_BACK ) {
//Handle what you want in long press.
return true;
}
return super.onKeyLongPress( keyCode, event );
}