Je pense que vous devez utiliser l'une de ces méthodes pour pouvoir intercepter l'événement avant qu'il ne soit envoyé aux composants appropriés:
Activity.dispatchTouchEvent(MotionEvent)
- Cela permet à votre activité d'intercepter tous les événements tactiles avant qu'ils ne soient envoyés à la fenêtre.
ViewGroup.onInterceptTouchEvent(MotionEvent)
- Cela permet à un ViewGroup de regarder les événements au fur et à mesure qu'ils sont distribués aux vues enfants.
ViewParent.requestDisallowInterceptTouchEvent(boolean)
- Appelez ceci sur une vue parent pour indiquer qu'elle ne doit pas intercepter les événements tactiles avec onInterceptTouchEvent (MotionEvent).
Plus d'informations ici .
J'espère que cela pourra aider.
Luis Miguel Serrano
la source
@Override public boolean dispatchTouchEvent(MotionEvent ev) { ... }
Déclarez votre
TextView
non cliquable / focalisable en utilisantandroid:clickable="false"
etandroid:focusable="false"
ouv.setClickable(false)
etv.setFocusable(false)
. Les événements de clic doiventTextView
maintenant être envoyés au parent de.Remarque:
Pour y parvenir , vous devez ajouter un clic à son direct
parent
. ou setandroid:clickable="false"
etandroid:focusable="false"
à son parent direct pour transmettre l'auditeur à un autre parent .la source
TextView#setOnClickListener()
sur leTextView
, il devient cliquable, même s'il est déclaré commeandroid:clickable="false"
, et même si leClickListener
est réglé surnull
(setOnclickListener(null)
)android:inputType
attribut, il consommera silencieusement les événements de clic même avec clickable: false & focusable: false; dans mon cas, il a été mis dans un style et il m'a fallu 30 minutes pour comprendre la cause.Parfois, cela aide:
Une autre variante, ne fonctionne pas toujours:
la source
CardView
la vue enfant, carCardView
semble ignorerclickable="false"
etfocusable="false"
. Cependant, utilisersetOnTouchListener
et appeleronTouchEvent
le parent permet plutôt au parent d'afficher des commentaires tactiles (par exemple, un effet d'entraînement).Mettre
dans child alors les vues obtiennent son état dessinable (focalisé, pressé, etc.) de son parent direct plutôt que de lui-même. vous pouvez définir onclick pour parent et il appelle sur enfant cliqué
la source
Si vous
TextView
créez des problèmes de clic, supprimez-leandroid:inputType=""
de votre fichier xml.la source
android:inputType="none"
Cette réponse est similaire à la réponse d'Alexander Ukhov , sauf qu'elle utilise des événements tactiles plutôt que des événements de clic. Ces événements permettent au parent d'afficher les états pressés appropriés (par exemple, effet d'entraînement). Cette réponse est également en Kotlin au lieu de Java.
la source
Si vous voulez à la fois
OnTouch
etOnClick
auditeur vue parent et de l' enfant à la fois, s'il vous plaît utiliser ci - dessous astuce:User ScrollView en tant que vue parent et à l'intérieur qui a placé votre vue enfant dans Relative / LinearLayout.
Faites en
android:fillViewport="true"
sorte que Parent ScrollView ne puisse pas faire défiler la vueDéfinissez ensuite l'
OnTouch
écouteur sur parent et l'OnClick
écouteur sur les vues Enfant. Et profitez des deux rappels d'auditeur.la source