2013-01-02 1 views
8

Ho alcuni pulsanti che ho impostato separatamente come colore di sfondo rosso, verde e blu. Quando premo il pulsante, viene generato un evento, ma non vi è alcun cambiamento nella GUI affinché l'utente sappia che il pulsante è stato premuto. Il colore grigio scuro predefinito del pulsante Android diventa arancione e ritorna al colore grigiastro dopo aver rilasciato lo stato premuto. Come implementarlo sul pulsante colorato?Come cambiare il colore del pulsante colorato quando premuto su Android?

risposta

26

che viene implementato tramite un StateListDrawable, rappresentato da selector in XML. Riferimento: http://developer.android.com/guide/topics/resources/drawable-resource.html#StateList

Ecco un esempio di una drawable che sarà bianca con impostazione predefinita, nero quando premuto:

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:state_pressed="true" 
      android:drawable="@android:color/black" /> <!-- pressed --> 
    <item android:drawable="@android:color/white" /> <!-- default --> 
</selector> 
+0

Grazie mille . Funziona perfettamente – amy

2

Prova in questo modo:

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android" > 
    <item android:state_pressed="true" > 
     <shape> 
      <solid 
       android:color="#1E669B" /> 
      <stroke 
       android:width="2dp" 
       android:color="#1B5E91" /> 
      <corners 
       android:radius="6dp" /> 
      <padding 
       android:left="10dp" 
       android:top="10dp" 
       android:right="10dp" 
       android:bottom="10dp" />    
     </shape> 
    </item> 
    <item> 
     <shape> 
      <gradient 
       android:startColor="#1E669B" 
       android:endColor="#1E669B" 
       android:angle="270" /> 
      <stroke 
       android:width="4dp" 
       android:color="#1B5E91" /> 
      <corners 
       android:radius="7dp" /> 
      <padding 
       android:left="10dp" 
       android:top="10dp" 
       android:right="10dp" 
       android:bottom="10dp" /> 
     </shape> 
    </item> 
</selector> 
8

Come menzionato da K-Ballo, puoi usare StateListDrawable per implementare una vista con varie grafiche diverse a seconda dello stato. Nel tuo caso Button è la vista in cui due stati sono Button premuto e il pulsante non premuto.

Abbiamo bisogno di creare un file nella cartella buttonselector.xml drawable

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

    <item android:drawable="@drawable/button_not_pressed" android:state_pressed="false" android:state_selected="false"/> 
    <item android:drawable="@drawable/button_pressed" android:state_pressed="true"/> 

</selector> 

creare due file XML separati per lo stato del pulsante

button_not_pressed.xml

<?xml version="1.0" encoding="utf-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shape="rectangle"> 
    <gradient 
     android:startColor="#FFFFFF" 
     android:centerColor="#FFFFFF" 
     android:endColor="#FFFFFF" 
     android:angle="270" /> 
</shape> 

button_pressed .xml

<?xml version="1.0" encoding="utf-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shape="rectangle"> 
    <gradient 
     android:startColor="#FF0000" 
     android:centerColor="#FF0000" 
     android:endColor="#FF0000" 
     android:angle="270" /> 
</shape> 

Noterai due codici colore html # FF0000 & #FFFFFF che rappresentano il colore di sfondo del pulsante in base allo stato.

In te main.xml cui impostare lo stile del tuo pulsante personalizzato

<Button 
     android:id="@+id/customButton" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:background="@drawable/buttonselector" 
     android:text="test" 
     android:textColor="#000000" /> 

In te classe di attività aggiungere le seguenti due righe

Button customButton = (Button) findViewById(R.id.customButton); 
customButton.setBackground(getResources().getDrawable(R.drawable.buttonselector)); 

Speranza che aiuta

+0

Risposta molto più approfondita! – Diesel