When I use drawables from the AppCompat
library for my Toolbar
menu items the tinting works as expected. Like this:
<item
android:id="@+id/action_clear"
android:icon="@drawable/abc_ic_clear_mtrl_alpha" <-- from AppCompat
android:title="@string/clear" />
But if I use my own drawables or actually even copy the drawables from the AppCompat
library to my own project it will not tint at all.
<item
android:id="@+id/action_clear"
android:icon="@drawable/abc_ic_clear_mtrl_alpha_copy" <-- copy from AppCompat
android:title="@string/clear" />
Is there some special magic in the AppCompat
Toolbar
that only tint drawables from that library? Any way to get this to work with my own drawables?
Running this on API Level 19 device with compileSdkVersion = 21
and targetSdkVersion = 21
, and also using everything from AppCompat
abc_ic_clear_mtrl_alpha_copy
is an exact copy of the abc_ic_clear_mtrl_alpha
png from AppCompat
Edit:
The tinting is based on the value I have set for android:textColorPrimary
in my theme.
E.g. <item name="android:textColorPrimary">#00FF00</item>
would give me a green tint color.
Screenshots
Tinting working as expected with drawable from AppCompat
Tinting not working with drawable copied from AppCompat
After the new Support library v22.1, you can use something similar to this:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_home, menu);
Drawable drawable = menu.findItem(R.id.action_clear).getIcon();
drawable = DrawableCompat.wrap(drawable);
DrawableCompat.setTint(drawable, ContextCompat.getColor(this,R.color.textColorPrimary));
menu.findItem(R.id.action_clear).setIcon(drawable);
return true;
}