color - ¿Qué hay de nuevo en Drawable Tinting en Android L Developer Preview en comparación con la versión anterior?
change toolbar color android (2)
Estoy trabajando en la nueva vista previa de Android L y ahora estoy tratando con el concepto de tintado en dibujable.
Quiero saber si hay algo nuevo con respecto al tintado dibujable en Android L Developer Preview.
Leí esta documentación que dice:
La Vista previa del desarrollador de Android L le permite definir mapas de bits o nueve parches como máscaras alfa y teñirlos usando un recurso de color o un atributo de tema que se resuelve en un recurso de color (por ejemplo
?android:attr/colorPrimary
). Puede crear estos recursos solo una vez y colorearlos automáticamente para que coincidan con su tema.
Pero no entendí en qué se diferencia de la versión anterior. Sé cómo usar ColorFilter
o PorterDuffColorFilter
para aplicar tinte en la imagen. Cualquier ayuda al respecto será apreciada.
Comenzando en L, puede especificar tintes en XML. Estos pueden hacer referencia a los atributos del tema (como se muestra), las listas de estados de color, los recursos de color o los códigos de color hexadecimales explícitos. De forma predeterminada, el modo de tinte es SRC_IN, pero se puede establecer en otra cosa utilizando el atributo android: tintMode.
<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
android:src="@drawable/my_icon"
android:tint="?android:attr/colorControlNormal" />
Todos los controles predeterminados usan? Android: attr / colorControlNormal para su estado normal (por ejemplo, una casilla de verificación sin marcar) y? Android: attr / colorControlActivated (que se asigna a? Android: attr / colorAccent por defecto) para su estado activado casilla de verificación).
Puede usar estos atributos en sus propios diseños de aplicaciones para heredar los colores de marco predeterminados, o puede redefinirlos para cambiar los colores de control predeterminados o activados. También puede hacer referencia a atributos específicos de su aplicación (como se muestra).
<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
android:src="@drawable/my_icon"
android:tint="?attr/myThemeAttribute" />
¡Con la nueva biblioteca de soporte de Android 22.1 ahora es posible más soporte para teñir!
La biblioteca de soporte V4 sirve como la base de gran parte de la biblioteca de soporte de Android y contiene muchas de las clases enfocadas en hacer mucho más fácil la compatibilidad con versiones anteriores.
DrawableCompat ahora le brinda un nuevo tono a la API 4: simplemente ajuste su Drawable a través de DrawableCompat.wrap (Drawable) y setTint (), setTintList (), y setTintMode () solo funcionará: no es necesario crear y mantener dibujables separados solo para admitir múltiples ¡colores!
Información del blog de Chris Banes:
Tintado dibujable Los métodos de teñido Drawable agregados en Lollipop son súper útiles para permitirle tintar activos de forma dinámica. AppCompat tuvo su propia implementación al horno en la biblioteca de soporte de v21 y ahora lo hemos extraído en DrawableCompat en support-v4 para que todos puedan usarlo. Sin embargo, es importante saber cómo funciona.
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);
Lo que hay que recordar es que después de llamar a
DrawableCompat.wrap()
, no puede confiar en que el resultado sea del mismo tipo que el que le dio. En su lugar, debe usarDrawableCompat.unwrap()
para recuperar el Drawable original.Internamente, ahora envolvemos su Drawable en un especial "tint drawable" que actualizará automáticamente el filtro de color de su Drawable desde el tinte especificado. Esto nos permite manejar las instancias de ColorStateList.
Pero me pregunto cómo usarlo xml !! hay una opción llamada
<TintImageView
android:layout_width=""
android:layout_height=""
android:src=""
android:backgroundTint="@color/green"/>
pero si quiero cambiar el icono dibujable izquierda | derecha para EditText TextView, ¡no hay forma de hacerlo!