2014-06-28 6 views
1

Je voudrais changer la couleur de fond de mon ImageButton sur l'événement pressé.Android définir bouton de couleur de fond pressé

Voici ce que je suis fait:

<?xml version="1.0" encoding="utf-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shape="oval" > 

    <solid android:color="@color/rose_normal" /> 
    <solid 
     android:state_pressed="true" 
     android:color="@color/rose_fonce" /> 

    <stroke 
     android:width="1sp" 
     android:color="@color/rose_fonce" /> 

</shape> 

Mon bouton est bien en couleur « rose_normal », mais jamais en couleur « rose_fonce » sur la presse.

Où est le problème?

EDIT: Problem solved:

Créer un fichier xml appelé background_rounded_button.xml:

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 

    <item android:drawable="@drawable/rounded_button_rose_fonce" android:state_selected="true"></item> 
    <item android:drawable="@drawable/rounded_button_rose_fonce" android:state_pressed="true"></item> 
    <item android:drawable="@drawable/rounded_button_rose_normal"></item> 

</selector> 

rounded_button_rose_fonce.xml:

<?xml version="1.0" encoding="utf-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shape="oval" > 

    <solid android:color="@color/rose_fonce" /> 

    <stroke 
     android:width="1sp" 
     android:color="@color/rose_fonce" /> 

</shape> 

rounded_button_rose_normal.xml:

<?xml version="1.0" encoding="utf-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shape="oval" > 

    <solid android:color="@color/rose_normal" /> 

    <stroke 
     android:width="1sp" 
     android:color="@color/rose_fonce" /> 

</shape> 

Et enfin, appliquer arrière-plan pour le bouton:

<ImageButton 
     android:id="@+id/all_annonce_button_search" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentBottom="true" 
     android:layout_alignParentRight="true" 
     android:layout_marginBottom="10dp" 
     android:layout_marginRight="10dp" 
     android:background="@drawable/background_rounded_button.xml" 
     android:padding="16dp" 
     android:src="@drawable/ic_action_search" /> 

Répondre

3

Le problème est que vous êtes ne pas utiliser un sélecteur, mais une forme.

Essayez ce code (button_selector.xml, mettez-le dans votre dossier drawable):

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 

    <item android:drawable="@color/rose_fonce" android:state_selected="true"></item> 
    <item android:drawable="@color/rose_fonce" android:state_pressed="true"></item> 
    <item android:drawable="@color/rose_normal"></item> 

</selector> 

Lors du réglage de ce sélecteur comme l'arrière-plan d'un Button, il aura la couleur "rose_normal" dans l'état normal et la couleur "rose_fonce" lorsque vous appuyez sur ou sélectionnez.

Exemple:

<Button 
    android:background="@drawable/button_selector" /> 
+0

Merci, ça fonctionne très bien mais j'ai perdu la forme ovale de mon bouton. Comment puis-je rajouter cet ovale? – wawanopoulos

+1

@ wawanopoulos, Essayez de définir votre image personnalisée deux ovales au lieu de la couleur. –

+0

Ok, merci ça marche! Je vais mettre à jour mon message – wawanopoulos