2012-02-27 26 views
3

在Android中,View.onLongClickListener()大約需要1秒的時間將其視爲長按。如何配置長時間點擊的響應時間?如何配置LongClick的響應時間?

+0

看來這個時間是由ROM定義的,而不是你的活動。 – Huang 2012-02-27 04:48:49

+1

解決此問題的任何想法。我只是想加快onLongClick Listener的響應時間,順便說一句:我用它來進行拖放相關活動。 – user1234817 2012-02-27 04:55:00

+0

你想在這個長時間點擊操作中做什麼? – 2012-02-27 04:56:29

回答

8

默認超時由ViewConfiguration.getLongPressTimeout()定義。

您可以實現自己的長按:

boolean mHasPerformedLongPress; 
Runnable mPendingCheckForLongPress; 

@Override 
public boolean onTouch(final View v, MotionEvent event) { 

    switch (event.getAction()) { 
     case MotionEvent.ACTION_UP: 

      if (!mHasPerformedLongPress) { 
        // This is a tap, so remove the longpress check 
        if (mPendingCheckForLongPress != null) { 
         v.removeCallbacks(mPendingCheckForLongPress); 
        } 
       // v.performClick(); 
      } 

      break; 
     case MotionEvent.ACTION_DOWN: 
      if(mPendingCheckForLongPress == null) { 
       mPendingCheckForLongPress = new Runnable() { 
        public void run() { 
         //do your job 
        } 
       }; 
      } 


      mHasPerformedLongPress = false; 
      v.postDelayed(mPendingCheckForLongPress, ViewConfiguration.getLongPressTimeout()); 

      break; 
     case MotionEvent.ACTION_MOVE: 
      final int x = (int) event.getX(); 
      final int y = (int) event.getY(); 

      // Be lenient about moving outside of buttons 
      int slop = ViewConfiguration.get(v.getContext()).getScaledTouchSlop(); 
      if ((x < 0 - slop) || (x >= v.getWidth() + slop) || 
       (y < 0 - slop) || (y >= v.getHeight() + slop)) { 

       if (mPendingCheckForLongPress != null) { 
        v. removeCallbacks(mPendingCheckForLongPress); 
       } 
      } 
      break; 
     default: 
      return false; 
    } 

    return false; 
} 
+0

謝謝。我放棄longClick事件並立即使用MotionEvent。實際上,我開始像MotionEvent一樣,因爲它比longClick早得多(僅在API 11之後)。它使我的應用程序在更多Android手機上更輕鬆。我希望Java/Oracle通過簡單段引入longClick秒/ milsec – user1234817 2012-03-01 14:26:09

+0

「mHasPerformedLongPress」永遠不會設置爲真? – wangqi060934 2013-09-03 16:51:54

0

這可能是來不及回答,但需要有人的情況下。

如果您的手機是固定的,您可以更改超時時間。 只需將數據庫中的值設置爲所需的超時值即可。這將影響系統的長按事件。

目錄:/data/data/com.android.providers.settings/databases

文件:settings.db

:確保

: long_press_timeout

通過編碼?您可能需要系統應用程序權限。其實不太確定。 但如果你回追蹤ViewConfiguration.getLongPressTimeout()方法中,你會看到常值從Settings.Secure.LONG_PRESS_TIMEOUT來這是

超時設置操作是寫在settings.db映射查看課程,因此它會影響每個視圖。