temas style studio para estilos estilo create change buttons android android-layout drawable uicolor

studio - style android xml



Botón de Android Tinte Dibujable (5)

Como sugirió @Boris, puede usar la biblioteca de soporte.

He extendido el AppCompatButton con un borrador de código . El TintAppCompatButton debe tener un comportamiento predeterminado, pero TintAppCompatButtonCustom se hizo para demostrar la coloración personalizada.

Veré si puedo elevar una PR para incluir eso en la biblioteca de soporte oficial.

El código de interés es:

private void init() { PorterDuff.Mode tintMode = PorterDuff.Mode.SRC_IN; Drawable[] ds = getCompoundDrawables(); tint(ds[LEFT], Color.RED, tintMode); tint(ds[TOP], Color.YELLOW, tintMode); tint(ds[RIGHT], Color.GREEN, tintMode); tint(ds[BOTTOM], Color.BLUE, tintMode); } private void tint(Drawable d, int color, PorterDuff.Mode tintMode) { TintInfo ti = new TintInfo(); ti.mTintMode = tintMode; ti.mTintList = ColorStateList.valueOf(color); ti.mHasTintList = true; ti.mHasTintMode = true; TintManager.tintDrawable(d, ti, new int[]{0}); }

¿Es posible teñir el DrawableLeft en un botón de Android? Tengo un dibujo negro que me gustaría pintar de blanco. Sé cómo lograr esto con una vista de imagen (imagen de la izquierda) pero quiero hacerlo con el botón de Android predeterminado.

Mi código fuente:

<Button android:layout_height="wrap_content" android:layout_width="0dp" android:layout_weight="1" android:text="@string/drawer_quizzes" android:backgroundTint="@color/md_light_green_500" android:stateListAnimator="@null" android:textColor="#fff" android:textSize="12dp" android:fontFamily="sans-serif" android:drawableLeft="@drawable/ic_action_landscape" android:gravity="left|center_vertical" android:drawablePadding="8dp" />

¿Hay alguna manera de teñir el botón? ¿O hay un método de vista personalizado para lograr este efecto?


Puede que tarde en esto, pero si estás usando C #, puedes hacerlo de esta manera:

Color iconColor = Color.Orange; // TODO: Get from settings Mode mode = Mode.SrcAtop; Drawable drawable = ResourcesCompat.GetDrawable(Resources, Resource.Drawable.ic_action_arrest, null); drawable.SetColorFilter(iconColor, mode);

También necesitarás:

using Android.Graphics; using static Android.Graphics.PorterDuff; using Android.Graphics.Drawables;

Espero que esto ayude. Es la forma más fácil que he encontrado. Tenga en cuenta, también, que CUALQUIER lugar en su aplicación que esté utilizando este icono, será de este color.


Puedes lograr colorear el drawableleft en un botón con este método:

Paso 1: cree un archivo de recursos dibujable con mapa de bits como elemento principal como se muestra a continuación y ic_action_landscape.xml nombre ic_action_landscape.xml debajo de la carpeta ic_action_landscape.xml

<?xml version="1.0" encoding="utf-8"?> <bitmap xmlns:android="http://schemas.android.com/apk/res/android" android:src="@android:drawable/ic_btn_speak_now" android:tint="@color/white" />

Paso 2: Crea tu control Button en tu diseño como se muestra a continuación

<Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:backgroundTint="@color/md_light_green_500" android:drawableLeft="@drawable/ic_action_landscape" android:drawablePadding="8dp" android:fontFamily="sans-serif" android:gravity="left|center_vertical" android:stateListAnimator="@null" android:text="@string/drawer_quizzes" android:textColor="#fff" android:textSize="12dp" />

El botón obtiene el ic_action_landscape.xml del ic_action_landscape.xml de la carpeta drawable en lugar de @android: drawable o drawable png (s).

Método 2:
Paso 1:
Incluso puede agregar el ícono como barra de acción e íconos de pestaña con Primer plano como imagen que se puede importar desde una ubicación personalizada o una imagen prediseñada

Paso 2:
En el menú desplegable Tema, seleccione Personalizar.

Paso 3:
Luego seleccione el color como #FFFFFF en la selección de color de primer plano.

Finalmente, finalice el asistente para agregar la imagen, luego agregue el dibujo como una imagen.


Puedes usar android:drawableTint="@color/yourColor" en la versión de android> 23.


Sé que ya hay muchas respuestas, pero ninguna de ellas me hizo feliz porque no quería tener diferentes elementos dibujables para diferentes estilos de elementos.

Así que mi solución fue establecer un filtro de color en un constructor como este:

int textColor = getTextColors().getColorForState(EMPTY_STATE_SET, Color.WHITE); Drawable[] drawables = getCompoundDrawablesRelative(); for (Drawable drawable : drawables) { if(drawable != null) { drawable.setColorFilter(textColor, PorterDuff.Mode.SRC_ATOP); } }

Utilicé el color del texto porque era lo que necesitaba, pero se puede reemplazar con un atributo personalizado para que sea más dinámico.