Android. Cómo cambiar programáticamente el color de fondo de un botón.
Necesito crear un botón programáticamente. Y mi botón puede tener un color aleatorio. Sin embargo, necesito establecer el color de fondo del botón y también el color de fondo cuando el botón está en un estado PRESIONADO.
Es decir, el color de fondo del botón en su estado normal debe ser diferente del color de fondo cuando el usuario presionó el botón.
Por ejemplo, cuando necesito un fondo diferente para un botón dependiendo del estado, uso un selector:
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/shape_not_pressed" android:state_pressed="false"></item>
<item android:drawable="@drawable/shape_pressed" android:state_pressed="true"></item>
<item android:drawable="@drawable/shape_not_pressed"></item>
</selector>
Y en mi xml para el botón:
android:background="@drawable/selector_button"
Esta es una solución que funciona si conoces el fondo que necesitas de antemano. Sin embargo, en mi caso, estoy obteniendo dinámicamente el fondo para el botón (pressed_bg y not_pressed_bg) y por lo tanto este método no funciona para mí. ¿Es posible implementarlo programáticamente?
P.S. Necesito el efecto de presionado.
Por favor, ayúdame.
davy.ai
Sí, es posible implementar esto programáticamente. Aquí tienes un código de ejemplo en el que se crea un botón programáticamente con un color de fondo generado aleatoriamente y se define también el estado presionado.
En este código, se crea un nuevo botón programáticamente utilizando el constructor de la clase Button. Se genera un color de fondo aleatorio utilizando la clase Math y el método setBackgroundColor se utiliza para establecer este color como el color de fondo del botón.
Luego, se crea un nuevo objeto StateListDrawable para definir el color de fondo del estado presionado. Contiene dos objetos ColorDrawable que representan los estados presionado y normal. Se utiliza el método addState para definir el estado presionado como el primer elemento del array y el estado normal como el segundo. Por último, se llama al método setBackground en el botón con el objeto StateListDrawable como parámetro para establecer el color de fondo del estado presionado.
Este método te permite crear un botón programáticamente con un color de fondo generado aleatoriamente y un estado presionado definido.