2012-03-31 62 views

Trả lời

13

AFAIK, không. Nó có dây cứng trong khuôn khổ qua getLongPressTimeout() trên ViewConfiguration.

Bạn được quyền xử lý các sự kiện chạm của riêng mình và xác định khái niệm "nhấp chuột dài" của riêng bạn. Chỉ cần chắc chắn rằng nó không quá khác biệt đáng kể so với những gì người dùng mong đợi và nhiều khả năng người dùng sẽ mong đợi những gì tất cả các ứng dụng khác sử dụng, đó là thời lượng 500ms chuẩn.

+2

Bạn sẽ định nghĩa khái niệm nhấp chuột dài của riêng mình như thế nào? – zzzzzzzzzzzzzzzzzzzzzzzzzzzzzz

+0

Cảm ơn, tôi đoán tôi sẽ gắn bó với mặc định cho bây giờ. – fhucho

+0

@zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz có thể bằng cách ghi đè Chế độ xem. Tên người dùng mát BTW ;-) – fhucho

3

Đây là giải pháp làm việc đơn giản nhất tôi tìm thấy hạn chế này:

//Define these variables at the beginning of your Activity or Fragment: 
private long then; 
private int longClickDuration = 5000; //for long click to trigger after 5 seconds 

... 

//This can be a Button, TextView, LinearLayout, etc. if desired 
ImageView imageView = (ImageView) findViewById(R.id.desired_longclick_view); 
imageView.setOnTouchListener(new OnTouchListener() { 
     @Override 
     public boolean onTouch(View v, MotionEvent event) { 
     if (event.getAction() == MotionEvent.ACTION_DOWN) { 
      then = (long) System.currentTimeMillis(); 
     } else if (event.getAction() == MotionEvent.ACTION_UP) { 
      if ((System.currentTimeMillis() - then) > longClickDuration) { 
      /* Implement long click behavior here */ 
      System.out.println("Long Click has happened!"); 
      return false; 
      } else { 
      /* Implement short click behavior here or do nothing */ 
      System.out.println("Short Click has happened..."); 
      return false; 
      } 
     } 
     return true; 
     } 
    }); 
11

Đây là cách của tôi cho thời gian thiết lập để báo chí dài

private int longClickDuration = 3000; 
private boolean isLongPress = false; 

numEquipeCheat.setOnTouchListener(new View.OnTouchListener() { 
     @Override 
     public boolean onTouch(View v, MotionEvent event) { 
      if (event.getAction() == MotionEvent.ACTION_DOWN) { 
       isLongPress = true; 
       Handler handler = new Handler(); 
       handler.postDelayed(new Runnable() { 
        @Override 
        public void run() { 
         if (isLongPress) { 
          Vibrator vibrator = (Vibrator) getActivity().getSystemService(Context.VIBRATOR_SERVICE); 
          vibrator.vibrate(100); 
          // set your code here 
          // Don't forgot to add <uses-permission android:name="android.permission.VIBRATE" /> to vibrate. 
         } 
        } 
       }, longClickDuration); 
      } else if (event.getAction() == MotionEvent.ACTION_UP) { 
       isLongPress = false; 
      } 
      return true; 
     } 
    }); 
2

Đây là những gì tôi sử dụng. Nó tương tự như câu trả lời của Cumulo Nimbus, với hai sự khác biệt đáng chú ý.

  1. Sử dụng giá trị sự kiện đã lưu cho thời gian ngừng hoạt động và thời gian hiện tại. Bên cạnh nỗ lực không nhân đôi, điều này có tác dụng tốt đẹp làm cho người nghe có thể sử dụng cho nhiều lượt xem cùng một lúc mà không theo dõi thời gian bắt đầu cho mỗi sự kiện riêng lẻ.
  2. Kiểm tra view.isPressed để đảm bảo người dùng đã không rời khỏi chế độ xem trong sự kiện chạm. Điều này bắt chước hành vi hệ thống mặc định cho onClickonLongClick.

long longPressTimeout = 2000; 

@Override 
public boolean onTouch(View view, MotionEvent event) { 
    if (view.isPressed() && event.getAction() == MotionEvent.ACTION_UP) { 
     long eventDuration = event.getEventTime() - event.getDownTime(); 
     if (eventDuration > longPressTimeout) { 
      onLongClick(view); 
     } else { 
      onClick(view); 
     } 
    } 
    return false; 
} 

Nếu xem là không bình thường có thể click bạn sẽ cần phải gọi view.setClickable(true) cho view.isPressed() kiểm tra để làm việc.

Các vấn đề liên quan