My app min SDK is 21 so its no need to add
AppCompatDelegate.setCompatVectorFromResourcesEnabled(true);
to Application class since its only for lower than 21 (anyway I tried to add it with no result).
My build.gradle config file has
defaultConfig {vectorDrawables.useSupportLibrary = true}
setting and no proguard/minify enabled
debuggable true
crunchPngs false
minifyEnabled false
shrinkResources false
splits.abi.enable false
splits.density.enable false
Anyway I checked the compiled .apk file using AndroidStudio and insured that all my vector drawables are really present in res/drawable folder, so its not proguard/shrinker or like.
Also I have to mention that I'm using androidx
instead of support
in this project.
So I've tried all possible variations of image setting:
setImageResource(imgResId);
setImageDrawable(ContextCompat.getDrawable(context, imgResId));
setImageDrawable(AppCompatResources.getDrawable(context, imgResId));
setImageDrawable(VectorDrawableCompat.createFromResource(resources, imgResId));
setImageDrawable(VectorDrawableCompat.create(resources, imgResId, null));
setImageDrawable(ResourcesCompat.getDrawable(resources, imgResId, null));
without any result (actually the result was always an app crash). Sending real Theme
instead of null
did not help either.
It is a common PagerAdapter
and vector drawable images are being set to corresponding ImageView
on every page dynamically, so it's not that static xml android:src="@drawable\ic_img"
case when you should (but not must) replace it with app:srcCompat="@drawable\ic_img"
.
And I also tried to wrap image into selector like:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/vector_image" />
</selector>
but no luck - crash report changes a bit but finally it leads to the same exception.
Nothing helped me from this SO question and any other SO questions I found as well.
My vector drawables are using gradient which works only starting from API 24. I'm testing my app on API 26 device but tried to replace all gradients by adding android:fillColor
into the path
section and commenting gradient section, like:
<path
android:pathData="M268.177,..."
android:strokeWidth="1"
android:fillType="nonZero"
android:strokeColor="#00000000"
android:fillColor="#FFEF5E32">
<!--<aapt:attr name="android:fillColor">-->
<!--<gradient-->
<!--android:startY="84.70677"-->
<!--android:startX="284.02185"-->
<!--android:endY="70.083954"-->
<!--android:endX="252.21419"-->
<!--android:type="linear">-->
<!--<item android:offset="0" android:color="#FFEF5E32"/>-->
<!--<item android:offset="1" android:color="#FFF68F32"/>-->
<!--</gradient>-->
<!--</aapt:attr>-->
</path>
And no luck...
I realize that importing my vectors to png/webp will most probably fix the issue but I want to use vector drawables.