2012-12-28 20 views
19

Per creare un costume ToggleButton, ho definito un nuovo stile in /res/values/styles.xml:Android: Alterna colore del testo di ToggleButton

<style name="myToggleButton"> 
    <item name="android:layout_width">wrap_content</item> 
    <item name="android:layout_height">wrap_content</item> 
    <item name="android:textColor">#000000</item> 
    <item name="android:background">@drawable/my_toggle_button</item> 
</style> 

e poi io uso un selettore per specificare come gli stati del pulsante appaiono in /res/drawable/my_toggle_button.xml:

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:state_checked="true"> 
     <shape> 
      [...] 
     </shape> 
    </item> 
    <item android:state_checked="false" 
     <shape> 
      [...] 
     </shape> 
    </item> 
</selector> 

Come posso modificare questa impostazione per alternare il colore del testo del pulsante quando lo stato cambia?

+0

in ambito forma, fornire i parametri di colore desiderati ed eliminare lo sfondo in style.xml. – Tugrul

+0

Penso che questo collegamento sia utile per il tuo problema: http://stackoverflow.com/questions/7096599/how-to-change-the-text-color-of-an-android-tooglebutton-on-state-change – secretlm

+0

Based sulla sperimentazione con il completamento automatico in Eclipse, quel collegamento non fornisce una sintassi valida. L'unico modo possibile per specificare un colore è '' nell'ambito di ''. Tuttavia, non cambia il colore del testo. –

risposta

61

Creare un elenco di stato simile per i colori del testo che si desidera e inserirlo in res/color, ad es.

res/color/toggle_color.xml

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:state_checked="true" android:color="#070" /> 
    <!-- Default State --> 
    <item android:color="#A00" /> 
</selector> 

Quindi impostare questa risorsa come il colore del testo del pulsante:

<item name="android:textColor">@color/toggle_color</item> 

PS, è buona norma avere l'ultima voce in un selettore non ha bandiere di Stato aggiunto (cioè uno stato predefinito) piuttosto che definirlo con l'inverso degli stati sopra.

+1

Perfetto, grazie! –

+2

risposta molto utile - ma ho trovato che non è stato eseguito solo perché i caratteri maiuscoli non sono consentiti nel nome del file (almeno la versione API 18) - made edit :) – davnicwil