81 votes

Comment définir une image d'arrière-plan de bouton d'image pour différents états?

Je veux imagebutton avec deux états i) ii) appuyez sur(ou sur).

J'ai mis normal de l'image dans le imagebutton fond et je suis en train de changer d'image(pressé) à partir de onclick méthode, mais elle ne change pas.

Je veux que si j'ai appuyé sur le bouton image puis image doit changer de normal à la enfoncée jusqu'à ce que j'appuie sur le bouton d'autres mais ça n'arrive pas.

Quelqu'un peut-il suggérer pour moi comment puis-je le faire avec le sélecteur ou au moment de l'exécution?

Voici mon imagebuttonpanel code.

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent"
  android:orientation="horizontal"
  android:gravity="bottom"
  android:id="@+id/buttonpanel">
  <ImageButton android:id="@+id/buttonhome"
               android:layout_width="80dp"
               android:layout_height="36dp"
               android:focusable="true" 
               android:background="@drawable/homeselector">
               </ImageButton>
  <ImageButton android:id="@+id/buttonsearch"
               android:layout_height="36dp"
               android:layout_width="80dp"
               android:background="@drawable/searchselector"
               android:focusable="true">
               </ImageButton>>
  <ImageButton android:id="@+id/buttonreg"
               android:layout_height="36dp"
               android:layout_width="80dp"
               android:background="@drawable/registerselector"
               android:focusable="true">
               </ImageButton>>
  <ImageButton android:id="@+id/buttonlogin"
               android:layout_height="36dp"
               android:layout_width="80dp"
               android:background="@drawable/loginselector"
               android:focusable="true">
               </ImageButton>
</LinearLayout>

et mon sélecteur de xml est

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

</selector> 

Et j'ai également essayé de changer l'image de la ressource sur ontouch et de l'événement onclick, mais ça n'aide pas.

225voto

ingsaurabh Points 10892

créer un fichier XML dans votre dessin comme celui-ci

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

et définir des images en conséquence, puis définir ce xml en tant qu'arrière-plan du bouton de votre image

14voto

Parag Chauhan Points 11830

Essaye ça

 btn.setOnClickListener(new OnClickListener() {
    public void onClick(View v) {
        btn.setBackgroundResource(R.drawable.icon);
    }
});
 

9voto

bass.t Points 226

mhh. J'ai une autre solution qui m'a aidé, parce que je n'ai que deux états différents:

  • soit l'élément n'est pas cliqué
  • ou il est cliqué et donc il sera mis en évidence

Dans mon .xml, je définis le ImageButton comme ceci:

  <ImageButton
    android:id="@+id/imageButton"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:src="@drawable/selector" />
 

Le fichier de sélecteur correspondant ressemble à ceci:

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

    <item android:drawable="@drawable/ico_100_checked" android:state_selected="true"/>
    <item android:drawable="@drawable/ico_100_unchecked"/>

</selector>
 

Et dans mon onCreate, j'appelle:

 final ImageButton ib = (ImageButton) value.findViewById(R.id.imageButton);

    OnClickListener ocl =new OnClickListener() {
        @Override
        public void onClick(View button) {
            if (button.isSelected()){
                button.setSelected(false);
            } else {
                ib.setSelected(false);
                //put all the other buttons you might want to disable here...
                button.setSelected(true);
            }
        }
    };

ib.setOnClickListener(ocl);
//add ocl to all the other buttons
 

terminé. J'espère que cela t'aides. m'a pris un certain temps pour comprendre.

8voto

VenkaReddy Points 1282

Salut essayez le code suivant il vous sera utile,

 ((ImageView)findViewById(R.id.ImageViewButton)).setOnTouchListener(new View.OnTouchListener() {

            public boolean onTouch(View v, MotionEvent event) {
                if(event.getAction()==MotionEvent.ACTION_DOWN)
                    ((ImageView)v.findViewById(R.id.ImageViewButton)).setImageResource(R.drawable.image_over);
                if(event.getAction()==MotionEvent.ACTION_UP)
                    ((ImageView)v.findViewById(R.id.ImageViewButton)).setImageResource(R.drawable.image_normal);
                return false;
            }
        });
 

3voto

Samuel Points 4472

je pense que votre problème n'est pas le sélecteur de fichier.

vous devez ajouter

<imagebutton ..
    android:clickable="true"
/>

pour votre image de boutons.

par défaut, le onClick est traitée à l'listitem niveau (parent). et le imageButtons ne pas recevoir le onClick.

lorsque vous ajoutez le au-dessus de l'attribut de l'image bouton de recevoir l'événement et le sélecteur sera utilisé.

vérifiez ce POST qui explique la même chose pour une case à cocher.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X