En la nueva biblioteca de AppCompat, podemos teñir el botón de esta manera:
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/follow"
android:id="@+id/button_follow"
android:backgroundTint="@color/blue_100"
/>
¿Cómo puedo configurar el tinte del botón mediante programación en mi código? Básicamente, estoy tratando de implementar una coloración condicional del botón en función de la entrada del usuario.
android
android-appcompat
Stephane
fuente
fuente
Respuestas:
De acuerdo con la documentación, el método relacionado
android:backgroundTint
es setBackgroundTintList (lista ColorStateList)Actualizar
Siga este enlace para saber cómo crear un recurso de lista de estado de color.
luego cárguelo usando
donde
contextInstance
es una instancia de unContext
usando AppCompart
fuente
ViewCompat.setBackgroundTintList(View, ColorStateList)
que se puede usar hasta la API 4. Pero solo funciona para vistas que implementanTintableBackgroundView
, por ejemploAppCompatButton
(en lugar de lo habitualButton
).ViewCompat.setBackgroundTintList(View, ColorStateList)
, como sugirió @Jon Adams, tiene aún más sentido ya que View.setSupportButtonTintList está restringido conRestrictTo
anotaciones. Detalles aquí: developer.android.com/reference/android/support/annotation/…Podrías usar
Pero le recomendaría que use un tinte dibujable de biblioteca de soporte que se lanzó ayer:
Puede encontrar más en esta publicación de blog (consulte la sección "Tinte dibujable")
fuente
Parece que las vistas tienen sus propias mecánicas para la gestión de tintes, por lo que será mejor poner la lista de tintes:
fuente
Para extender correctamente la respuesta de dimsuz proporcionando una situación de código real, consulte el siguiente fragmento de código:
Esta solución es para el escenario en el que se utiliza un elemento de diseño como fondo del botón. También funciona en dispositivos anteriores a Lollipop.
fuente
¿Has intentado algo como ésto?
tenga en cuenta que getResources () solo funcionará en una actividad. Pero también se puede utilizar en cualquier contexto.
fuente
así es como se hace en kotlin:
fuente
Puede utilizar DrawableCompat por ejemplo
fuente
esto se maneja fácilmente en el nuevo Botón Material de la biblioteca de diseño de materiales, primero, agregue la dependencia:
luego en su XML, use esto para su botón:
y cuando desee cambiar el color, aquí está el código en Kotlin, no está obsoleto y se puede usar antes de Android 21:
fuente
La forma en que logré hacer que el mío funcione fue usando
CompoundButtonCompat.setButtonTintList(button, colour)
.A mi entender, esto funciona independientemente de la versión de Android.
fuente
Tuve un problema similar. Quería colorear un fondo dibujable complejo para una vista basada en un valor de color (int). Tuve éxito usando el código:
Donde color es un valor int que representa el color requerido. Esto representa el xml ColorStateList simple:
Espero que esto ayude.
fuente
ColorStateList.valueOf(ColorInt)
Para ImageButton puede usar:
fuente
Si está usando
Kotlin
yMaterial Design
, puede cambiar el color de suMaterialButton
así:Puede mejorarlo aún mejor creando una función de extensión para que su
MaterialButton
código sea más legible y su codificación un poco más conveniente:Entonces, puede usar su función en todas partes de esta manera:
fuente
Además de la respuesta de Shayne3000 , también puede usar un recurso de color (no solo un color int). Versión de Kotlin :
fuente
La respuesta sugerida aquí no funciona correctamente en Android 5.0 si su lista de estado de color basada en XML hace referencia a atributos temáticos. Por ejemplo, tengo una lista de estado de color xml así:
Usar esto como backgroundTint de xml funciona bien en Android 5.0 y todo lo demás. Sin embargo, si trato de configurar esto en un código como este:
(No hagas esto)
En realidad, no importa si paso la actividad o el contexto del botón al método ContextCompat.getColorStateList (), ni me dará la lista de estado de color adecuada con respecto al tema en el que se encuentra el botón. Esto se debe a que no se admitió el uso de atributos de tema en listas de estado de color hasta api 23 y ContextCompat no hace nada especial para resolverlos. En su lugar, debe usar AppCompatResources.getColorStateList () que realiza su propio análisis de recursos / resolución de atributos de tema en dispositivos <API 23.
En su lugar, debes usar esto:
TLDR: use AppCompatResources y no -ContextCompat- si necesita recursos temáticos resueltos en todas las versiones de API de Android.
Para obtener más información sobre el tema, consulte este artículo .
fuente