Android: comment propager l'événement click aux enfants LinearLayout et modifier leur drawable
Je voudrais créer un linéaire de la mise en page qui se comporteraient de la même façon à ImageButton.
<LinearLayout
android:id="@+id/container"
style="?WidgetHomeIconContainer">
<ImageView
android:id="@+id/icon"
style="?WidgetHomeIcon" />
<TextView
android:id="@+id/title"
style="?WidgetHomeLabel"
android:text="@string/title"
android:textAppearance="?attr/TextHomeLabel" />
</LinearLayout>
Dans les styles de ImageView, TextView et LinearLayout, j'ai mis un sélecteurs pour tous les états.
Maintenant:
- quand je clique sur ImageView (j'ai essayé aussi avec ImageButton) - il se comporte correctement et l'image est modifiée en fonction du sélecteur xml.
- quand je clique sur LinearLayout - linéaire de la mise en page est cliqué, mais l'ImageView et TextView ne pas changer c'est drawable/apparence
Donc je voudrais faire la chose suivante. Quand je clique sur le parent LinearLayout, j'ai besoin de changer tous les childs à l'état activé.
J'ai essayé d'ajouter le code suivant à LinearLayout onClickListener à se propager le cliquez:
@Override
public void onClick(View v)
{
LinearLayout l = (LinearLayout) v;
for(int i = 0; i < l.getChildCount(); i++)
{
l.getChildAt(i).setClickable(true);
l.getChildAt(i).performClick();
}
}
Mais il reste reamins le même. Merci beaucoup pour toute aide.
source d'informationauteur Bhiefer
Vous devez vous connecter pour publier un commentaire.
Mettre
dans votre ImageView et TextView..ensuite, le point de vue d'obtenir son drawable état (porté, pressé, etc.) de son parent direct plutôt que de partir de lui-même.
Pas seulement pour chaque enfant:
Mais aussi en outre:
Cela permettra d'éviter les comportements inattendus (ou la solution ne marche pas) si cliquable enfant vues sont utilisés.
La Source
Après avoir le même problème quelques mois plus tard, j'ai trouvé cette solution:
Dans mon cas, pas de l'une des autres solutions fonctionne!
J'ai finalement dû utiliser
OnTouchListener
comme expliqué icila capture de l'événement lorsque l'utilisateur clique dans la vue parent, et la suppression de tous les childsOnClickListener
.L'idée est donc délégué cliquez sur le comportement de la mère, et d'informer l'enfant qui est vraiment cliqué, si vous voulez propager l'événement. ¡¡C'est ce que nous recherchons!!
Ensuite, nous avons besoin de vérifier qui l'enfant a été cliqué. Vous pouvez trouver une référence ici de savoir comment son fait. Mais l'idée est basiclly arriver le domaine de l'enfant, et en demandant qui contient les cliqué coordonnées, pour effectuer son action (ou pas).