2013-07-30 9 views
6

Sto creando un ImageButton in questo modo:ImageButton onClick cambiamento di colore

  <ImageButton 
       android:id="@+id/one" 
       android:layout_width="0dip" 
       android:layout_height="wrap_content" 
       android:layout_weight="0.333" 
       android:adjustViewBounds="true" 
       android:background="@null" 
       android:contentDescription="@string/description_image_button_one" 
       android:scaleType="fitEnd" 
       android:src="@drawable/dialpad_1" /> 

Vorrei implementare un modo per avere il flash tasto o cambiare colore quando si fa clic/premuto solo per identificare che come stato cliccato . So che posso fare riferimento allo sfondo come disegnabile con un selettore di state_pressed su un determinato colore. Sto cercando di evitare di creare un file xml separato per ogni pulsante nel drawable. Qual è il modo migliore per farlo senza creare tutti quei file xml aggiuntivi?

+1

in quel caso non impostare qualsiasi colore di sfondo che funzionerà naturalmente .. –

+0

Oppure al clic cambia colore del pulsante .. –

+0

Che cosa intendi esattamente, non impostare un colore di sfondo? Ho @null ora. – ono

risposta

10

È necessario creare selettori personalizzabili per lo sfondo del pulsante.

Questo file vivrà nella cartella XML, e simile a questa (ogni elemento descrive lo sfondo del pulsante quando in diversi stati selezionati):

file dovrebbe essere chiamato: res/drawable/my_custom_selector.xml

<selector 
    xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item 
     android:drawable="@drawable/blue_button_on" 
     android:state_focused="true" 
     android:state_pressed="true"/> 
    <item 
     android:drawable="@drawable/blue_button_on" 
     android:state_focused="false" 
     android:state_pressed="true"/> 
    <item 
     android:drawable="@drawable/blue_button_off" 
     android:state_focused="true" 
     android:state_pressed="false"/> 
    <item 
     android:drawable="@drawable/blue_button_off" 
     android:state_focused="false" 
     android:state_pressed="false"/> 
</selector> 

Poi l'applicazione di tale fondo al vostro ImageView (o qualsiasi View), è sufficiente impostare come sfondo:

<ImageButton 
       android:id="@+id/one" 
       android:layout_width="0dip" 
       android:layout_height="wrap_content" 
       android:layout_weight="0.333" 
       android:adjustViewBounds="true" 
       android:background="@drawable/my_custom_selector" 
       android:contentDescription="@string/description_image_button_one" 
       android:scaleType="fitEnd" 
       android:src="@drawable/dialpad_1" /> 
+0

Capito. Quindi se ho 12 pulsanti devo creare 12 file xml? – ono

+0

No, lo stesso sfondo può essere utilizzato in tutti i pulsanti. vale a dire. basta applicare lo stesso sfondo a ciascuno dei vostri pulsanti (e saranno tutti lo stesso sguardo quando viene premuto). button1.setBackground (my_drawable); button2.setBackground (my_drawable); eccetera – Booger

1

I file XML che stai cercando di evitare sono il modo più semplice per ottenere ciò che desideri. L'altro modo sarebbe utilizzare il codice nello onClickListener, che a mio parere è un'attività che richiede molto più lavoro.

+0

Poiché esiste una src diverso per ogni pulsante, devo creare un separato xml per ogni pulsante, corretto? – ono

+0

In effetti, ma l'alternativa è che dovrai specificare una trama diversa per lo stato premuto e non premuto usando il codice, che è anche peggio. Quindi penso che dovresti andare in quel modo. –

+0

Non ho risposto alla tua domanda? –

0

Si consiglia di file XML altrimenti non fare nulla.Android fornisce il colore predefinito per il pulsante premuto.