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
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>
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>
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
Risposta molto più approfondita! – Diesel
Grazie mille . Funziona perfettamente – amy