Tinting ImageView not working on Android 5.0. Ideas how to make it work again?
Use the AppCompatImageView
like so:
<android.support.v7.widget.AppCompatImageView
android:id="@+id/my_appcompat_imageview"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/my_image"
android:tint="#636363"
/>
Make sure you have the latest compile 'com.android.support:appcompat-v7:23.4.0'
in your app's build.gradle
.
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.