Android 5.0 (Lollipop), which is API version 21, supports tinting of drawables. So now you don’t need to recreate your monochrome action icons (in multiple sizes) just to show them in a different color in your app bar (ActionBar or ToolBar).
Unfortunately, drawable tinting isn’t available via the AppCompat library. That makes it useless for now unless you want to target only Android 5.0 devices, but here’s how to use it anyway. One day Android 5.0 might be old enough.
This is another part of my adventure in changing the color of stuff in Android’s app bar, after already figuring out how to change the color of the app bar’s text and standard icons.
Regular Drawables
Normally you’d just have the regular multiple .png files for your action item like so:
res/drawable-hdpi/ic_action_something.png res/drawable-mdpi/ic_action_something.png res/drawable-xhdpi/ic_action_something.png res/drawable-xxhdpi/ic_action_something.png res/drawable-xxxhdpi/ic_action_something.png
You would use these in your layout XML like so:
<item android:id="@+id/option_menu_item_something" android:icon="@drawable/ic_action_something"
Or you would use them in code like this:
menutem.setIcon(android.R.drawable.ic_action_something);
Tinted Drawables
You can now add a tinted version of the existing drawable like so:
res/drawable/ic_action_something_tinted.xml
With XML contents such as this:
<?xml version="1.0" encoding="utf-8"?> <bitmap xmlns:android="http://schemas.android.com/apk/res/android" android:src="@drawable/ic_action_something" android:tint="@color/color_action_icons_tint"/>
That color_action_icons_tint could be hardcoded, but you’ll want to use the same one repeatedly via a color resource, like so:
res/values/color.xml
With XML contents like this:
<?xml version="1.0" encoding="utf-8"?> <resources> <color name="color_action_icons_tint">#5a6518</color> </resources>
You can then refer to that tinted drawable just like any other drawable,
in your layout XML like so:
<item android:id="@+id/option_menu_item_something" android:icon="@drawable/ic_action_something_tined"
or in code like this:
menutem.setIcon(android.R.drawable.ic_action_something_tinted);
cool, it’s very useful. I use this in case.
For future reference: Just because you are using AppCompat, this will NOT work. It is mentioned here: http://android-developers.blogspot.pt/2014/10/appcompat-v21-material-design-for-pre.html
Other than that, works great in >= api 21