gpt4 book ai didi

android - 如何区分长按键和普通按键?

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:23:39 24 4
gpt4 key购买 nike

我正在尝试覆盖后退键的功能。当用户按下一次时,我希望它返回到上一个屏幕。但是,当长按返回键时(比方说,两秒或更长时间),我想退出应用程序。

到目前为止,我已经在我的 Activity 中覆盖了这两个方法:

@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 停止它的流经不同的事件处理程序。

你需要做的是:

  1. 在返回 true 之前,按照 documentation 中的说明调用 event.startTracking() .
  2. 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 );
}

关于android - 如何区分长按键和普通按键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8226771/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com