0

I have the following situation: I have a constraint layout with background:

<androidx.constraintlayout.widget.ConstraintLayout
            android:id="@+id/cl_wave_header"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="@drawable/ic_wave_header_svg_drawable"
            android:paddingBottom="41dp"
            app:layout_constraintTop_toTopOf="parent">

Here's the ic_wave_header_svg_drawable:

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/ic_wave_header" />
</layer-list>

Here's the ic_wave_header:

<vector xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:aapt="http://schemas.android.com/aapt"
    xmlns:tools="http://schemas.android.com/tools"
    android:width="328dp"
    android:height="199dp"
    android:viewportWidth="328"
    android:viewportHeight="199"
    tools:ignore="VectorRaster">
    <path
        android:fillType="evenOdd"
        android:pathData="M328,198.147C328,198.147 287.806,164.737 164,168.868C40.194,172.999 0,140 0,140V198.147V0H328L328,198.147Z">
        <aapt:attr name="android:fillColor">
            <gradient
                android:endX="351.346"
                android:endY="198.147"
                android:startX="351.346"
                android:startY="-28.2069"
                android:type="linear">
                <item
                    android:color="#FF9DDE10"
                    android:offset="0" />
                <item
                    android:color="#FF82BD00"
                    android:offset="1" />
            </gradient>
        </aapt:attr>
    </path>
</vector>

When I run the app, it crashes on android 6.0 and lower. In the other versions, it works correctly. What's the problem and how can I solve it?

UPD Error log:

Caused by: android.content.res.Resources$NotFoundException: File res/drawable/ic_wave_header.xml from drawable resource ID #0x7f080180
        at android.content.res.Resources.loadDrawableForCookie(Resources.java:2640)
        at android.content.res.Resources.loadDrawable(Resources.java:2540)
        at android.content.res.TypedArray.getDrawable(TypedArray.java:870)
        at android.graphics.drawable.LayerDrawable.updateLayerFromTypedArray(LayerDrawable.java:296)
        at android.graphics.drawable.LayerDrawable.inflateLayers(LayerDrawable.java:239)
        at android.graphics.drawable.LayerDrawable.inflate(LayerDrawable.java:164)
        at android.graphics.drawable.Drawable.createFromXmlInner(Drawable.java:1215)
        at android.graphics.drawable.Drawable.createFromXml(Drawable.java:1124)
        at android.content.res

It seems that it is something incorrect with drawable, but if it is right, why it doesn't crash on other devices
Sergei Mikhailovskii
  • 2,100
  • 2
  • 21
  • 43

2 Answers2

1

In your application class -> enable setCompatVectorFromResourcesEnabled

public class App extends Application {

@Override
public void onCreate() {
    super.onCreate();
    AppCompatDelegate.setCompatVectorFromResourcesEnabled(true);//add this
 }
Ranjithkumar
  • 16,071
  • 12
  • 120
  • 159
1

This crash is caused by using android:offset="0" in svg file of your drawable.

To fix this you can either avoid using android:offset="0" in svg file (by using plain color instead of gradient) or you can use .png format of your drawable image for quick fix.