with new Android Support Library 22.1 now more support for tinting possible!
The Support V4 library serves as the base of much of the
Android Support Library and contains many of the classes focused on
making backward compatibility much easier.
DrawableCompat now brings drawable tinting back to API 4: simply wrap
your Drawable via DrawableCompat.wrap(Drawable) and setTint(),
setTintList(), and setTintMode() will just work: no need to create and
maintain separate drawables only to support multiple colors!
Info from Chris Banes blog:
Drawable tinting The Drawable tinting methods added in Lollipop are
super useful for letting you dynamically tint assets. AppCompat had
its own baked in implementation in the v21 support library and we’ve
now extracted that into DrawableCompat in support-v4 for everyone to
use. It’s important to know how it works though.
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);
The thing to remember is that after you call DrawableCompat.wrap()
, you
can not rely on the result being the same type as what you give it.
Instead you should use DrawableCompat.unwrap()
to retrieve the
original Drawable.
Internally, we now wrap your Drawable in a special ‘tint drawable’
will automatically update your Drawable’s color filter from the
specified tint. This allows us to handle ColorStateList instances.
But I wonder how to use it xml !! there is option called
<TintImageView
android:layout_width=""
android:layout_height=""
android:src=""
android:backgroundTint="@color/green"/>
but if I want to change the drawable left|right icon for EditText TextView there no way to do that I feel!
TextView
? – Afghanistan