Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Toolbar icon tinting on Android

I've noticed that using AppCompat themes, default toolbar icons get tinted by the attribute colorControlNormal in my style.

<style name="MyTheme" parent="Theme.AppCompat">     <item name="colorControlNormal">@color/yellow</item> </style> 

enter image description here

As you can see above, however, it does not happen with all icons. I provided the "plus" sign, which I got from the official icons, and it does not get tinted (I used the "white" version of the png). From what I have understood from this question, system tints only icons with just an alpha channel. Is this true?

If so: Is there a place where I can find alpha-defined, official material icons? If not - and if Toolbar icons need to be alpha-only to be tinted - how is Google expecting us to use provided icons in a Toolbar?

Somewhere in the SDK I found some icons ending in _alpha.png, and they actually get tinted well. However I need the full set of material icons, and from the official sources I could only find white, grey600 and black ones.

Applying a ColorFilter at runtime would be slightly painful, and my actual Toolbar - with some icons tinted, some others not - looks quite bad.

like image 704
natario Avatar asked Jan 29 '15 16:01

natario


People also ask

What is colorControlNormal?

boxme/Android Color Control Cheat Sheet For instance, "android:colorControlNormal" becomes "colorControlNormal". These attributes will be propagated to their corresponding attributes within the android namespace. for devices running Lollipop. Any exceptions to this will be noted by including the "android:" prefix.


1 Answers

Another option is to use the new support for vector drawables in the support library.

See res/xml/ic_search.xml in blog post AppCompat — Age of the vectors

Notice the reference to ?attr/colorControlNormal

<vector xmlns:android="..."     android:width="24dp"     android:height="24dp"     android:viewportWidth="24.0"     android:viewportHeight="24.0"     android:tint="?attr/colorControlNormal">     <path         android:pathData="..."         android:fillColor="@android:color/white"/> </vector> 
like image 88
Joe Bowbeer Avatar answered Sep 28 '22 03:09

Joe Bowbeer