У меня есть немного сомнения. Я использую кнопку изображения (например, значок воспроизведения в медиаплеере). Я хочу знать, какое действие прослушиватель я должен использовать, onClickListener или onTouchListener. В чем разница между этими двумя действиями и когда я должен использовать их.
Разница между кликами и сенсорными прослушивателями в Android
Ответ 1
-
onClickListener
используется всякий раз, когда событие клика для любого вида создается, например, например: click event для Button, ImageButton. -
onTouchListener
используется всякий раз, когда вы хотите реализовать функциональность Touch типа, например, если вы хотите получить координаты экрана, на котором вы точно коснетесь.
Обновление:
Просто проверьте официальный документ для обоих: onClickListener и onTouchListener.
Итак, из официального документа, определение для обоих:
- onClickListner: определение интерфейса для обратного вызова, вызываемого при нажатии на просмотр.
- onTouchListener. Определение интерфейса для обратного вызова, вызываемого при отправке события касания к этому представлению. Обратный вызов будет вызван до того, как событие касания будет передано в представление.
Ответ 2
Ответ от @vishy1618 имеет ключевое понимание этого потока (пытался оставить это как комментарий там, но слишком долго).
Концептуально, onClick - это всего лишь "обертка" вокруг определенной последовательности событий касания - вниз, без перетаскивания вверх. Таким образом, сравнение onTouch и onClick - это просто низкоуровневый API (raw touch events) и высокоуровневый API (логический пользователь 'click').
Но важная проблема совместимости: в Android, onClick также может быть запущена KEYBOARD (или трекболом или любым другим альтернативным входом/аппаратным устройством). Но (afaict) нет поддержки для срабатывания сенсорных событий через любое другое устройство ввода, кроме сенсорного экрана.
Итак, если вы кодируете свой пользовательский интерфейс только для сенсорных событий, вам неявно требуется сенсорный экран. Если вы придерживаетесь onClick, ваше приложение теоретически может работать на устройстве без касания.
Конечно, все "совместимые" Android телефонов в настоящее время имеют сенсорные экраны... так что это эффективно спорно. Но если вы хотите, чтобы ваше приложение работало на нетелефонном оборудовании, это, возможно, стоит рассмотреть.
Здесь есть хорошее обсуждение:
Как определить, имеет ли устройство Android сенсорный экран?
https://groups.google.com/forum/?fromgroups=#!topic/android-beginners/cjOVcn0sqLg
Ответ 3
OnClickListener - это ряд событий, которые запускаются с клавиатуры или сенсорного экрана. Они выполняются по определенному виду, и весь вид принимает событие. Напротив, onTouchListener используется только для событий сенсорного экрана, и они не могут запускаться с клавиатуры или любых других входов. Они обычно также получают соответствующую информацию касания, такую как x, y corrdinates и т.д.
Я думаю, что onClickListener подходит для вашего приложения, если вы не используете более сложные входы, такие как жесты и т.д.
Ответ 4
Этот вопрос я также имел в виду, что должен использовать клик или сенсорный прослушиватель.
Тогда у меня есть мое понимание, подобное этому,
Когда мне понадобится View(Button/Image/etc) to make clickable
, это означает, что пользователь просто не прикасается к этой части экрана, но старательно прикасайтесь к этой части экрана, чтобы следующее действие получило название я use onClickListener
. Также другая вещь, как полагают, работает с Button мы можем сделать его Clickable True/False по требованию динамически, поэтому в этих ситуациях рекомендуется использовать OnClickListener.
new View.OnClickListener() {
public void onClick(View v) {
// TODO Auto-generated method stub
}
};
При разработке экранов where the simple Touch of User is to be taken as action
, как и в играх или работе с изображениями, которые вы хотите захватить, когда пользователь коснулся, а также вам нужно to find the Motion Events up/down/left/righ
t для Touch я преф. use onTouchListener
.
new View.OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
// TODO Auto-generated method stub
return false;
}
};
А В вашем случае я предлагаю использовать onClickListener