I stumbled upon the same problem.
Unfortunately there does not seem to be a possibility to make the splash screen work with just a vector drawable for pre API 23.
The problem is you can't load VectorDrawableCompat outside of the process, like in this case in your themes android:windowBackground. So what is likely happening here is, that on API 21 the Vector get's converted to a PNG to be compatible. So in the <layered-list>
the converted PNG is inserted into the <item>
element, which causes the bitmap to stretch to all edges, because it's missing the <bitmap>
element.
So my solution is the following: Create a drawable_splashscreen.xml
inside the folder drawables-v23
which looks like the following for the vector drawable.
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android"
android:opacity="opaque">
<item android:drawable="?attr/colorPrimary"/>
<item android:drawable="@drawable/ic_splashscreen" android:gravity="center"/>
</layer-list>
Then create another drawable_splashscreen.xml
but inside the regular drawables
folder:
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android"
android:opacity="opaque">
<item android:drawable="?attr/colorPrimary"/>
<item>
<bitmap android:src="@drawable/ic_splashscreen" android:gravity="center"/>
</item>
</layer-list>
Notice the <bitmap>
element. So now, when the PNG is used on pre API 23 devices it will be displayed properly and won't be stretched to the whole background.
Unfortunately you also have to provide splash screen as PNG for this to work in the old APIs.
But for every device with API 23+ the vector drawable will be used.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…