2013-07-30 6 views
6

Ich erstelle eine Image wie so:Image onClick verfärben

  <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" /> 

Ich mag eine Art und Weise implementieren, um die Taste Blitz oder die Farbe ändern zu haben, wenn/gedrückt geklickt nur zu erkennen, dass es als angeklickt . Ich weiß, dass ich den Hintergrund als ein drawable mit einer Auswahl von state_pressed auf eine bestimmte Farbe verweisen kann. Ich versuche zu vermeiden, eine separate XML-Datei für jede Schaltfläche im Zeichenbereich zu erstellen. Was ist der beste Weg, dies zu tun, ohne all diese zusätzlichen XML-Dateien zu erstellen?

+1

in diesem Fall kann eine beliebige Hintergrundfarbe nicht festgelegt, es wird funktionieren natürlich .. –

+0

Oder auf klicken Sie auf die Farbe der Schaltfläche ändern .. –

+0

Was genau meinst du nicht eine Hintergrundfarbe? Ich habe @null jetzt. – ono

Antwort

10

Sie müssen benutzerdefinierte ausklappbare Selektoren für den Hintergrund Ihrer Schaltfläche erstellen.

Diese Datei wird in der XML-Ordner, leben und in etwa so aussehen (jedes Element, wenn in verschiedenen ausgewählten Staaten auf die Schaltfläche Hintergrund beschreibt):

würde

Datei benannt werden: res/ziehbar/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> 

dann, dass Hintergrund zu Ihrem Image (oder jede View) anzuwenden, setzen sie sich einfach als Hintergrund verwenden:

<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

Verstanden. Also, wenn ich 12 Tasten habe, muss ich 12 XML-Dateien erstellen? – ono

+0

Nein, der gleiche Hintergrund kann in allen Tasten verwendet werden. dh. Verwende einfach den gleichen Hintergrund für jeden deiner Knöpfe (und sie werden alle dasselbe aussehen, wenn sie gedrückt werden). button1.setBackground (my_drawable); button2.setBackground (my_drawable); etc – Booger

1

Die XML-Dateien, die Sie vermeiden möchten, sind der einfache Weg, um das zu erreichen, was Sie wollen. Der andere Weg wäre die Verwendung von Code in der onClickListener, die meiner Meinung nach eine Aufgabe ist, die viel mehr Arbeit braucht.

+0

Da es eine andere Quelle für jede Schaltfläche ist, muss ich eine separate erstellen xml für jede Schaltfläche, richtig? – ono

+0

In der Tat, aber die Alternative ist, dass Sie eine andere Textur für gepresste und nicht gepresste Zustand mit Code angeben müssen, die noch schlimmer ist. Also ich denke, du solltest diesen Weg gehen. –

+0

Habe ich dir nicht die Frage beantwortet? –

0

Sie sollten XML-Dateien oder sonst nichts tun. Android bietet Standardfarbe für die Schaltfläche gedrückt.

Verwandte Themen