2011-01-19 16 views
7

Quiero cambiar el estilo de un botón de forma dinámica, es decir, en el código de Java, algo así como:¿Cómo puedo cambiar el estilo de un botón dinámicamente en 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> 

no he visto nada como setStyle, por lo que:

qué tengo que cambiar cada propiedad o puedo cambiar todo el estilo?

Respuesta

0

También puede ser que desee echar un vistazo a 9 imágenes de parche. Estos son muy útiles para ajustar el tamaño de la imagen y el texto vinculado a su widget o botón en función del dispositivo actual que ejecuta su aplicación.

9 patch

9 patch draw tool

+0

que sabía de eso, pero muchas gracias. El ejemplo de estilo que di no es un buen ejemplo porque no es el que quiero aplicar al botón, es solo un estilo inventado. Quiero cambiar cosas como sombras, texto, color/tamaño, etc. – DarthRoman

11

Para asignar un estilo como este

<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 botón de forma dinámica es necesario utilizar ambas funciones() setBackgroundResource() y setTextAppearance. Ej .:

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

donde

btn_default_holo_dark

es un nombre de archivo .xml que describe un selector de este botón.

+0

¡esta debería ser la respuesta aceptada! –

1

La manera más fácil que he encontrado para evitar esta falla obvia era hacer a los botones. Haga uno de ellos Visibility.gone. Después, simplemente cambiar Visibility de la otra a gone y activar la primera por Visibility.visible.

que no me gusta mucho esa solución, pero es más rápido y más sano que las alternativas que he encontrado hasta ahora.

Cuestiones relacionadas