Generalmente, no se pueden cambiar los estilos mediante programación; puede establecer el aspecto de una pantalla, o parte de un diseño, o un botón individual en su diseño XML utilizando temas o estilos . Sin embargo, los temas se pueden aplicar mediante programación .
También existe un elemento StateListDrawable
que le permite definir diferentes elementos de diseño para cada estado en el que Button
puede estar, ya sea enfocado, seleccionado, presionado, deshabilitado, etc.
Por ejemplo, para que su botón cambie de color cuando se presiona, puede definir un archivo XML llamado res/drawable/my_button.xml
directorio como este:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:state_pressed="true"
android:drawable="@drawable/btn_pressed" />
<item
android:state_pressed="false"
android:drawable="@drawable/btn_normal" />
</selector>
A continuación, puede aplicar este selector a un Button
estableciendo la propiedad android:background="@drawable/my_button"
.
style
atributo de Android , pero puede establecer programáticamente el fondo de unButton
me gusta con cualquier otra vista, si eso es suficiente. Además, comoButton
herencia deTextView
, puede cambiar las propiedades del texto. Solo mire la documentación de la API para estos elementos ... developer.android.com/reference/android/view/…En primer lugar, no es necesario utilizar un inflador de diseño para crear un botón simple. Puedes usar:
Si desea diseñar el botón, tiene 2 opciones: la más simple es especificar todos los elementos en el código, como sugieren muchas de las otras respuestas:
La otra opción es definir el estilo en XML y aplicarlo al botón. En el caso general, puede utilizar a
ContextThemeWrapper
para esto:Para cambiar los atributos relacionados con el texto en un TextView (o sus subclases como Button) hay un método especial:
Este último no se puede utilizar para cambiar todos los atributos; por ejemplo, para cambiar el acolchado necesita utilizar un
ContextThemeWrapper
. Pero para el color, tamaño, etc. del texto, puede usarsetTextAppearance
.fuente
Sí, puede usar por ejemplo en un botón
fuente
Puedes hacer atributos de estilo así:
en lugar de:
fuente
Si está utilizando la biblioteca de soporte, simplemente puede usar
para TextViews y Buttons. Hay clases similares para el resto de Vistas :-)
fuente
Para cualquiera que busque una respuesta material, vea esta publicación SO: Botones para colorear en Android con Material Design y AppCompat
Usé una combinación de esta respuesta para establecer el color de texto predeterminado del botón en blanco para mi botón: https://stackoverflow.com/a/32238489/3075340
Entonces esta respuesta https://stackoverflow.com/a/34355919/3075340 para configurar programáticamente el color de fondo. El código para eso es:
your_colored_button
puede ser solo un regularButton
botón o de AppCompat si lo desea; probé el código anterior con ambos tipos de botones y funciona.EDITAR: Descubrí que los dispositivos anteriores a la piruleta no funcionan con el código anterior. Vea esta publicación sobre cómo agregar soporte para dispositivos pre-lollipop: https://stackoverflow.com/a/30277424/3075340
Básicamente haz esto:
fuente
Dependiendo de los atributos de estilo que desee cambiar, es posible que pueda utilizar la biblioteca de París:
Se admiten muchos atributos como background, padding, textSize, textColor, etc.
Descargo de responsabilidad: soy el autor de la biblioteca.
fuente
La respuesta de @Dayerman y @h_rules es correcta. Para dar un ejemplo elaborado con código, en la carpeta dibujable, cree un archivo xml llamado button_disabled.xml
Luego, en Java,
Esto establecerá la propiedad del botón en deshabilitada y establecerá el color en plateado.
[El color se define en color.xml como:
fuente
En tiempo de ejecución, sabes qué estilo quieres que tenga tu botón. Entonces, de antemano, en xml en la carpeta de diseño, puede tener todos los botones listos para usar con los estilos que necesita. Entonces, en la carpeta de diseño, es posible que tenga un archivo llamado: button_style_1.xml. El contenido de ese archivo podría verse así:
Si está trabajando con fragmentos, entonces en onCreateView infla ese botón, como:
donde contenedor es el contenedor de ViewGroup asociado con el método onCreateView que anula al crear su fragmento.
¿Necesitas dos botones más? Los crea así:
Puede personalizar esos botones:
Luego, agrega sus botones personalizados y estilizados al contenedor de diseño que también infló en el método onCreateView:
Y así es como puede trabajar dinámicamente con botones estilizados.
fuente
Hice una interfaz de ayuda para esto usando el patrón de soporte.
Ahora, para cada estilo que desee utilizar de forma pragmática, simplemente implemente la interfaz, por ejemplo:
Declare un estilo en su
attrs.xml
, el estilo para este ejemplo es:Aquí está el estilo declarado en
styles.xml
:Y finalmente la implementación del estilo titular:
Encontré esto muy útil ya que se puede reutilizar fácilmente y mantiene el código limpio y detallado, recomendaría usar esto solo como una variable local para que podamos permitir que el recolector de basura haga su trabajo una vez que hayamos terminado con la configuración de todos los estilos .
fuente
Me enfrenté al mismo problema recientemente. así es como lo resolví.
Gracias !
fuente