Cómo agregar tinte de botón mediante programación

En la nueva librería 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 fijar el tinte del botón programáticamente en mi código? Estoy básicamente tratando de implementar un coloración condicional del botón basado en la entrada de algunos usuarios

7 Solutions collect form web for “Cómo agregar tinte de botón mediante programación”

De acuerdo con la documentación del método relacionado con android:backgroundTint es setBackgroundTintList (lista ColorStateList)

Actualizar

Siga este enlace para saber cómo crear un recurso de lista de colores.

 <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android" > <item android:color="#your_color_here" /> </selector> 

Luego cargarlo usando

 setBackgroundTintList(contextInstance.getResources().getColorStateList(R.color.your_xml_name)); 

Donde contextInstance es una instancia de un Context


Usando AppCompart

 btnTag.setSupportButtonTintList(ContextCompat.getColorStateList(Activity.this, R.color.colorPrimary)); 

Podrías usar

 button.setBackgroundTintList(ColorStateList.valueOf(resources.getColor(R.id.blue_100))); 

Pero yo recomendaría que utilice una biblioteca de apoyo tintado dibujable que acaba de ser lanzado ayer:

 Drawable drawable = ...; // Wrap the drawable so that future tinting calls work // on pre-v21 devices. Always use the returned drawable. drawable = DrawableCompat.wrap(drawable); // We can now set a tint DrawableCompat.setTint(drawable, Color.RED); // ...or a tint list DrawableCompat.setTintList(drawable, myColorStateList); // ...and a different tint mode DrawableCompat.setTintMode(drawable, PorterDuff.Mode.SRC_OVER); 

Puedes encontrar más información en esta entrada del blog (ver sección "Dibujando el tinte")

¿Has intentado algo como ésto?

 button.setBackgroundTintList(getResources().getColorStateList(R.id.blue_100)); 

Tenga en cuenta que getResources () sólo funcionará en una actividad. Pero también se puede llamar a cada contexto.

Puede utilizar DrawableCompat, por ejemplo

 public static Drawable setTint(Drawable drawable, int color) { final Drawable newDrawable = DrawableCompat.wrap(drawable); DrawableCompat.setTint(newDrawable, color); return newDrawable; } 

Tuve un problema similar. Quise colorear un fondo dibujable complejo para una opinión basada en un valor del color (int). Lo conseguí usando el código:

 ColorStateList csl = new ColorStateList(new int[][]{{}}, new int[]{color}); textView.setBackgroundTintList(csl); 

Donde color es un valor int que representa el color requerido. Esto representa el simple xml ColorStateList:

 <selector xmlns:android="http://schemas.android.com/apk/res/android" > <item android:color="color here"/> </selector> 

Espero que esto ayude.

Parece que las vistas tiene mecánica propia para la gestión del tinte, por lo mejor se pondrá lista tinte:

 ViewCompat.setBackgroundTintList( editText, ColorStateList.valueOf(errorColor)); 

Utilizar:

 favoriteImageButton.setColorFilter(Color.argb(255, 255, 255, 255)); // White Tint 
  • Barra de herramientas de AppCompat: Cambiar color de icono de desbordamiento en ActionMode
  • El reproductor de video apaga el modo en Android usando appcompat-v7
  • Cambiar el color de la barra de herramientas en Appcompat 21
  • AppCompat DayNight tema siempre aparece como un tema de luz?
  • Problema con Android app-v7-appcompat con 4.0 y superior
  • Barra de herramientas y ActionBar contextual con AppCompat-v7
  • Cómo utilizar y estilo nuevo AlertDialog de appCompat 22.1 y superior
  • No se encontró ningún recurso que coincida con el nombre dado: attr 'android: actionModeShareDrawable' appcompat-v7: 21.0.0 con compileSdkVersion 21
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.