Intereting Posts
Как настроить Android Studio на работу полностью в автономном режиме? Просмотр фрагмента ViewPager's, потерянный при отображении родительского фрагмента ViewPager, затем отображается Не удалось преобразовать формат Dalvik: невозможно выполнить dex: java.nio.BufferOverflowException Замена фрагмента на другой фрагмент внутри группы действий VideoView запускает OnPreparedListener слишком рано для HLS Основные настройки Samsung Galaxy S II AVD (Android Virtual Device)? Как добавить дату к версииNameSuffix по градле React Native ListView TextInput блокируется от оптимизации оптимизации производительности Связь P2P в реальном времени между мобильными устройствами Android Studio говорит, что «невозможно разрешить символ», но компилирует проект Шина событий и жизненный цикл компонентов android ui Интерпретатор Haskell на Android? Emulator: ERROR: camera_device_start_capturing: Устройство AndroidEmulatorVC0 не может сохранить фрейм в буфер обмена Поддержка sip-менеджера api Сохранение данных из WebView

Изменение задержки длинного клика

Я слушаю события длинного щелчка View с помощью setOnLongClickListener (). Могу ли я изменить длительность / продолжительность длительного клика?

Solutions Collecting From Web of "Изменение задержки длинного клика"

AFAIK, no. Он жестко связан в рамках через getLongPressTimeout() в ViewConfiguration .

Вы можете обрабатывать свои собственные события касания и определять свою концепцию «длинного клика». Просто убедитесь, что он не слишком сильно отличается от ожидаемого пользователем, и, скорее всего, пользователь будет ожидать, что все остальные приложения будут использовать, что составляет стандартную длительность 500 мс.

Это мой путь для длительной печати

 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; } }); 

Это было простейшее рабочее решение, которое я нашел для этого ограничения:

 //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; } }); 

Это то, что я использую. Это похоже на ответ Кумуло Нимба, с двумя заметными отличиями.

  1. Используйте значения уже сохраненных событий для времени простоя и текущего времени. Помимо дублирующих усилий, это имеет приятный эффект, позволяя слушателю использовать несколько просмотров одновременно, не отслеживая время начала каждого отдельного события.
  2. Проверьте view.isPressed чтобы пользователь не отошел от просмотра во время события касания. Это имитирует поведение системы по умолчанию для onLongClick и onLongClick .

 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; } 

Если просмотр не является обычно кликабельным, вам нужно вызвать view.setClickable(true) для view.isPressed() для работы.