Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Support library VectorDrawable Resources$NotFoundException

I am using Design Support Library version 23.4.0. I have enabled the gradle flag:

defaultConfig {     vectorDrawables.useSupportLibrary = true } 

I am using build tools version 23.0.2, but still, I am getting Resources$NotFoundException on KitKat or lower.

It is occurring when I use android:drawableLeft or imageView.setImageResource(R.drawable.drawable_image).

And yes, I am putting this on every activity where I am using drawables

static {     AppCompatDelegate.setCompatVectorFromResourcesEnabled(true); } 

Is this a bug of the support library?

like image 607
Arka Avatar asked Jun 03 '16 13:06

Arka


2 Answers

It took 3 separate things for me to get this to work using support library 23.4.0:

  1. Add this to build.gradle

    defaultConfig {     vectorDrawables.useSupportLibrary = true } 
  2. Add the following to onCreate of your Application class

    AppCompatDelegate.setCompatVectorFromResourcesEnabled(true); 

    (From the reference of this link - "https://stackoverflow.com/a/45582033/10752962")

    In API less then 21,use this line before setContentView();

  3. For all XML views in which you are setting a vector drawable replace

    android:src 

    with

    app:srcCompat 

    and in the code replace this:

    imageView.setImageResource(...); 

    with

    imageView.setImageDrawable(...); 
like image 88
Rich Luick Avatar answered Oct 15 '22 21:10

Rich Luick


To complement some of the answers here: backward-compatible support for VectorDrawables comes with a price and doesn't work in all cases.

In which cases does it work? I've made this diagram to help (valid for Support Library 23.4.0 to at least 25.1.0).

VectorDrawable cheatsheet

like image 21
David Ferrand Avatar answered Oct 15 '22 20:10

David Ferrand