Aller au contenu

Ne pas hériter de l'état d'une vue parente


Pierre87

Recommended Posts

Salut!

J'ai un soucis avec une vue qui hérite de l'état "pressed" de sa vue parente.

Or, ce n'est pas ce que je souhaite.

Comment faire?

Un peu plus d'explications:

J'utilise un LinearLayout pour chaque lignes d'une ListView.

Ce LinearLayout contient un autre LinearLayout donc l'aspect varie en fonction de son état "pressed" (un peu comme un bouton)

(Je n'utilise pas la classe Button, car elle empêche de cliquer sur la ligne)

Problème, quand je clique sur ma ligne, l'affichage de mon bouton réagit comme si je cliquais dessus (il s'enfonce)

(bien évidemment, l'event d'appui sur le bouton n'est pas déclenché)

Comment empêcher que cet état "pressed" passe de la vue parente à la fille?

Merci!

Lien vers le commentaire
Partager sur d’autres sites

En gros la vue parente c'est le linearLayout englobant ? et le linearLayout interne se retrouve pressed autant que l'englobant ?

(je suis pas sur d'avoir compris lol).

Si c'est ca :

Tu peux pas dans le onclick parent, de-pressed son enfant ?

(désolé d'avance si totalement HS ^^)

Lien vers le commentaire
Partager sur d’autres sites

c'est ça pour l'arborescence des vue.

le bug est uniquement "visuel" :P

ce n'est pas lié à l'évènement "click", mais à l'état "pressed"

quand la vue parente est "pressed", alors la fille le devient aussi (chose que je veux empêcher)

Je n'ai pas vraiment accès aux vues, c'est un layout en xml.

Lien vers le commentaire
Partager sur d’autres sites

Si le problème est juste visuel tu as une solution qui consiste à redéfinir les états "graphiques" d'un bouton personnalisé (je l'ai encore fais hier ^^) : ici

Ou en français : ici

En gros si tu définis que pour l'état 'pressed' ou 'focus' tu as la même image que par défaut ... même en cliquant aucun changement visuel ne sera effectué.

Après peut être que je suis encore à coté de la plaque ^^ mais au moins ca aura le mérite de faire remonter le post ^^

Lien vers le commentaire
Partager sur d’autres sites

Bon, je reprends de zéro :)

Voilà le layout que j'utilise pour chaque ligne de ma ListView:

<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="@drawable/bkg_item_base">

..................... des trucs

<TextView
		android:id="@+id/button"
		android:layout_width="wrap_content"
		android:layout_height="wrap_content"
		android:drawable="@drawable/button" />
</LinearLayout>

Voilà le code de button.xml:

<selector
xmlns:android="http://schemas.android.com/apk/res/android">
<item
	android:state_pressed="true"
	android:drawable="@drawable/button_on" />
<item
	android:drawable="@drawable/button_off" />
</selector>

Je suis obligé d'utiliser une TextView pour mon bouton, car si j'utilise un Button la ligne n'est plus cliquable avec mon OnItemClickListener.

Problème:

Quand je clique sur la ligne (mais pas sur le "bouton") mon bouton change d'apparence, comme si il était cliqué!!!

Le bouton hérite donc de l'état "pressed" de la vue parente.

Je veux empêcher ça :)

Lien vers le commentaire
Partager sur d’autres sites

Bon c'est plus clair lol.

Et comme ca ca marche mieux :

<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:clickable="false"
android:background="@drawable/bkg_item_base">

..................... des trucs

<TextView
		android:id="@+id/button"
android:clickable="true"
		android:layout_width="wrap_content"
		android:layout_height="wrap_content"
		android:drawable="@drawable/button" />
</LinearLayout>

Si ca ne marche pas, question :

Est ce que appuyer sur le layout lance l'action du bouton ou change juste la couleur de ce dernier ?

Sinon peux tu essayer ces deux selectors et me revenir :

Premier test :

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
   <item android:state_window_focused="false" android:state_enabled="true" android:drawable="@drawable/button_off" />
   <item android:state_pressed="true" android:drawable="@drawable/button_on" />
   <item android:state_focused="true" android:drawable="@drawable/button_off" />
   <item android:state_enabled="true" android:drawable="@drawable/button_off" />
</selector>

Second Test :

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
   <item android:state_window_focused="false" android:state_enabled="true" android:drawable="@drawable/button_off" />
   <item android:state_window_focused="false" android:state_pressed="true" android:drawable="@drawable/button_off" />
   <item android:state_window_focused="true" android:state_pressed="true" android:drawable="@drawable/button_on" />
   <item android:state_focused="true" android:drawable="@drawable/button_off" />
   <item android:state_enabled="true" android:drawable="@drawable/button_off" />
</selector>

Jok

Lien vers le commentaire
Partager sur d’autres sites

Rien ne marche :(

J'ai essayé de mettre les 2 "android:clickable", aucun effet.

C'est l'apparence de mon "bouton" qui change, cliquer sur le layout ne déclenche pas le onClick() du "bouton"

Les 2 selector n'ont aucun effet

:(

Merci de ton aide :P

Lien vers le commentaire
Partager sur d’autres sites

Tu peux ajouter un onclik sur le layout externe avec comme action d'afficher tonboutton.isEnabled(), tonButton.isFocusabled, tonBoutton.isPressed, ...

Et mettre le résultat affiché ici ?

Je pense que ca peut aider.

(J'avoue je pourrais faire un POC mais j'ai la flemme, comme tu as deja le code tu peux le faire à la vollé ^^)

En gros en fonction de ce qui est true :

- soit ajuster le selector

- soit ajuster le xml

- soit ... super tweak : onclik du layout (tonbontton.setPressed(false)) ou un truc du genre ^^

Jok

Lien vers le commentaire
Partager sur d’autres sites

Salut!

Désolé d'avoir tardé à répondre, mais j'étais parti sur un autre problème entre temps ^^

En fait, le simple fait de poser un OnClickListener sur mon layout externe suffit à ce que mon "bouton" ne change plus d'état :P

Par contre, l'évènement de clic sur la ligne de ma ListView n'est plus capté par mon OnItemClickListener (propre à mon activity), mais par mon OnClickListener (propre à ma ligne)

C'est un peu crade, mais ça marche!

Merci!

Lien vers le commentaire
Partager sur d’autres sites

Archivé

Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.

×
×
  • Créer...