J'ai un groupe de vues qui est View.INVISIBLE
dans certaines circonstances. Dans cet état, je veux que le groupe de vues ou ses vues enfants ne répondent PAS aux événements de clic.
Selon l'implémentation par défaut de View.INVISIBLE
dans Android, les vues enfants à l'intérieur du groupe de vues sont toujours cliquables même lorsque la visibilité du groupe de vues est invisible. Je sais que je peux définir la visibilité sur View.GONE
mais je ne veux pas que tout le groupe de vues soit supprimé.
J'ai essayé de définir setClickable
sur true
sur le groupe de vues, mais cela n'a pas fonctionné et les vues enfants répondent toujours aux clics. Je ne veux pas parcourir toutes les vues dans les groupes de vues et les désactiver individuellement car c'est quelque chose que je dois faire fréquemment.
Existe-t-il une meilleure solution pour empêcher toutes les vues enfants du groupe de vues de recevoir des événements de clic?
3 Réponses :
Avez-vous essayé setEnabled(false)
?
Si cela ne fonctionne pas, vous pouvez désactiver tous les enfants de la vue comme suit:
LinearLayout layout = (LinearLayout) findViewById(R.id.my_layout); for (int i = 0; i < layout.getChildCount(); i++) { View child = layout.getChildAt(i); child.setEnabled(false); }
Je viens de voir que vous ne vouliez pas parcourir toutes les vues, donc c'est mon problème.
Ah d'accord. Aucun problème. setEnabled(false)
ne fonctionne cependant pas.
Essayez une ancienne méthode.
viewgroup.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { if(viewgroup.getVisibility() == View.INVISIBLE) return; } });
Peut-être que vous pouvez essayer 'setOnClickListener'.
viewgroup.setOnTouchListener(null)
Et vous souhaitez recevoir l'événement de clic du groupe de vues.
viewgroup.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { return true; // return true can intercept click event go down } });
Essayez de définir un écouteur tactile sans opération dans le groupe de vues.
les vues enfants peuvent toujours recevoir des événements de clic.
Vous devez retourner
true
pour consommer l'événement.vous voulez dire
myViewGroup.setOnTouchListener { _, _ -> true }
?Oui. Veuillez consulter les réponses sur stackoverflow.com/questions/5418510
Cela ne fonctionne pas pour le groupe de vues. Les autres réponses dans ce lien pointent vers la désactivation des clics de manière récursive, ce que je ne veux pas cz j'ai beaucoup de vues.