【问题标题】:Detect long press on "virtual" back-key检测长按“虚拟”后退键
【发布时间】:2013-02-04 15:21:55
【问题描述】:

还没有找到解决办法。 我想检测对“虚拟”后退键的长按,例如你在 Galaxy s2 上找到的那个。

我尝试检测用户按下按钮时的 onKeyDown-events(有效),以及当用户离开按钮但虚拟键一直在触发 onKeyUp-events 时的 onKeyUp-events。

我也尝试过覆盖 onKeyLongPress 方法,但这没有帮助。

 @Override
public boolean onKeyDown(int keyCode, KeyEvent event)
{
    if (keyCode == KeyEvent.KEYCODE_BACK)
    {
        mBackKeyDownTime = event.getEventTime();
        return true;
    }
    return super.onKeyDown(keyCode, event);
}

@Override
public boolean onKeyUp(int keyCode, KeyEvent event)
{
    if(keyCode == KeyEvent.KEYCODE_BACK)
    {
        mBackKeyUpTime = event.getEventTime();
        final long delta = mBackKeyUpTime - mBackKeyDownTime;
        return true;
    }
    return super.onKeyUp(keyCode, event);
}

【问题讨论】:

  • 你能贴出你试过的代码吗?

标签: android


【解决方案1】:

试试这个...

    int LONG_PRESS_TIME = 5000; // Time in miliseconds
    Handler handler;
    Runnable longPressed;

    handler = new Handler();
    longPressed = new Runnable() {
    public void run() {
    Log.d("LogTag", "Long Pressed");
    }
};

    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event)
    {
    if (keyCode == KeyEvent.KEYCODE_BACK)
     {
             handler.postDelayed(longPressed, LONG_PRESS_TIME);
         return true;
     }
     return super.onKeyDown(keyCode, event);
 }

 @Override
 public boolean onKeyUp(int keyCode, KeyEvent event)
 {
     if(keyCode == KeyEvent.KEYCODE_BACK)
     {
         handler.removeCallbacks(longPressed);
         return true;
     }
     return super.onKeyUp(keyCode, event);
 }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多