Support library VectorDrawable Resources$NotFoundE

2019-01-30 10:20发布

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?

12条回答
虎瘦雄心在
2楼-- · 2019-01-30 10:48

We had the same issue. Vector drawables were not visible on Kitkat. I solved this issue by adding AppCompatDelegate.setCompatVectorFromResourcesEnabled(true); to the onCreate method of Activities.

Before that dont forget to add:

defaultConfig {
    vectorDrawables.useSupportLibrary = true
}

and call setImageResource for the view that you use the vector drawable. My view is ImageButton. I have Android SDK build tools version 23.0.3

查看更多
叼着烟拽天下
3楼-- · 2019-01-30 10:48

Do not put your vectors in drawable-anydpi , old devices does not support that

put them in drawable

查看更多
叛逆
4楼-- · 2019-01-30 10:55

I had a similar problem long ago, it did not work by setting

vectorDrawables.useSupportLibrary = true

only worked when I created the "mipmap" folder, and the code used

imageView.setImageResource (R.mipmap.drawable_image)

It has more Info here

查看更多
别忘想泡老子
5楼-- · 2019-01-30 10:56

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);
    
  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(...);
    
查看更多
爷的心禁止访问
6楼-- · 2019-01-30 10:57

API 16 animation
Inflating Drawable's

`VectorDrawable` and `AnimatedVectorDrawable` in this support library can be inflated in this way:

  • Calling static getDrawable() methods:
//This will only inflate a drawable with <vector> as the root element
VectorDrawable.getDrawable(context, R.drawable.ic_arrow_vector);

//This will only inflate a drawable with <animated-vector> as the root element
AnimatedVectorDrawable.getDrawable(context, R.drawable.ic_arrow_to_menu_animated_vector);

// This will inflate any drawable and will auto-fallback to the lollipop implementation on api 21+ devices
ResourcesCompat.getDrawable(context, R.drawable.any_drawable);

If inflating the Drawable in java code, it is recommended to always use ResourcesCompat.getDrawable() as this handles Lollipop fallback when applicable. This allows the system to cache Drawable ConstantState and hence is more efficient.
The library has the following morph (bi-directional) animations :

  • Play-Pause morph animation
  • Play-Stop morph animation
  • Arrow-Hamburger menu morph animation

  • As you can see, I produced the above image on my API 16 phone:

    import com.wnafee.vector.compat.AnimatedVectorDrawable;
    mdrawable = (AnimatedVectorDrawable) AnimatedVectorDrawable.getDrawable(this.getApplicationContext(), R.drawable.consolidated_animated_vector);
    

    Look at the github README for vector-compat here: https://github.com/wnafee/vector-compat
    This will fix your problem (down to API 14) if you merge it with your app module's build.gradle dependencies (usually at the end of file):

    dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    //Trying to FIX Binary XML file line #2: invalid drawable tag animated-vector
        compile 'com.android.support:appcompat-v7:25.0.0'
        compile 'com.android.support:design:25.0.0'
    //not needed
    //  compile 'com.android.support:support-vector-drawable:25.0.0'
        compile 'com.wnafee:vector-compat:1.0.5'//*******holy grail *******https://github.com/wnafee/vector-compat
    //  Failed to resolve: com.android.support:support-animated-vector-drawable:25.0.0
    //not needed
    //  compile 'com.android.support:support-animated-vector-drawable:25.0.0'
    }
    
    查看更多
    乱世女痞
    7楼-- · 2019-01-30 10:58

    Use AppCompatImageView instead of ImageView as said by Harish Gyanani in comments , it works fine with this for me.

    Official docs

    查看更多
    登录 后发表回答