Tinting ImageView not working on Android 5.0. Ideas how to make it work again?
android, android-5.0-lollipop, android-imageview, imageview
Solution
As per @alanv comment, here goes the hacky fix to this bug. Basic idea is to extend `ImageView` and apply `ColorFilter` right after inflation:
public class TintImageView extends ImageView {
public TintImageView(Context context, AttributeSet attrs) {
super(context, attrs);
initView();
}
private void initView() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
ColorStateList imageTintList = getImageTintList();
if (imageTintList == null) {
return;
}
setColorFilter(imageTintList.getDefaultColor(), PorterDuff.Mode.SRC_IN);
}
}
}
As you might guess, this example is somewhat limited (`Drawable` set after inflation tint won't be updated, only default color of `ColorStateList` is used, and maybe something else), but if you got the idea you can fit it to your use-case.
Problem
In an application I've built I noticed that the ImageViews are not tinted on devices running the new Android Lollipop. This is the code that used to work correctly on older versions of the OS: ``` <ImageView android:layout_width="40dp" android:layout_height="40dp" android:layout_gravity="bottom|right" android:contentDescription="@string/descr_background_image" android:src="@drawable/circle_shape_white_color" android:tint="@color/intent_circle_green_grey" /> ``` and this is the drawable that is loaded in the ImageView: ``` <?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="oval" > <gradient android:startColor="@color/white" android:endColor="@color/white" android:angle="270"/> </shape> ``` Once again, this is working correctly on devices running JellyBean/Kitkat, but the tint has no effect on devices running Lollipop. Any ideas how to fix it? Is it a bug in the OS, or should I start tinting the image differently?