2011-01-19 13 views
7

Voglio cambiare lo stile di un pulsante in modo dinamico, cioè in codice Java, qualcosa di simile a:Come posso modificare uno stile di pulsante in modo dinamico in Android?

((Button)findViewById(id)).setStyle("@styles/foo") 

<resources> 
    <style name="foo"> 
     <item name="android:adjustViewBounds">true</item> 
     <item name="android:maxHeight">100px</item> 
     <item name="android:maxWidth">200px</item> 
    </style> 
</resources> 

Non ho mai visto nulla di simile setStyle, quindi:

devo cambiare ogni singola proprietà o posso cambiare l'intero stile?

risposta

0

Si potrebbe anche voler dare un'occhiata a 9 immagini di patch. Questi sono molto utili per regolare le dimensioni dell'immagine e il testo legato al widget o al pulsante in base al dispositivo corrente su cui è in esecuzione l'applicazione.

9 patch

9 patch draw tool

+0

Sapevo di questo, ma grazie mille. L'esempio di stile che ho dato non è un buon esempio perché non è quello che voglio applicare al pulsante, è solo uno stile inventato. Voglio cambiare le cose come ombre, testo colore/dimensione, ecc. – DarthRoman

11

Per assegnare uno stile come questo

<style name="ButtonHOLO" parent="android:Widget.Button"> 
     <item name="android:background">@drawable/btn_default_holo_dark</item> 
     <item name="android:minHeight">@dimen/calc_btn_h</item> 
     <item name="android:minWidth">@dimen/calc_btn_w</item> 
     <item name="android:textColor">#ffffff</item> 
</style> 

a un pulsante in modo dinamico è necessario utilizzare entrambe le funzioni() setBackgroundResource() e setTextAppearance. Es .:

btn.setBackgroundResource(R.drawable.btn_default_holo_dark); 
btn.setTextAppearance(context, R.style.ButtonHOLO); 

dove

btn_default_holo_dark

è un nome di file .xml che descrive un selettore per il pulsante.

+0

questa dovrebbe essere la risposta accettata !!! –

1

Il modo più semplice che ho trovato per aggirare questo difetto evidente era quello di creare pulsanti. Ne fai uno di loro Visibility.gone. Quindi cambia semplicemente Visibility dall'altra a gone e attiva il primo da Visibility.visible.

Non mi piace questa soluzione, ma è più veloce e più salutare delle alternative che ho trovato finora.

Problemi correlati