Search code examples
android-12

Is it possible to get an uncropped splash screen in Android 12?


On Android versions older than Android 12 I am easily able to construct a splash screen with an image which is not cropped. For example like this on Android 11:

Splash screen on Android 11

However, Android 12 introduced a new Splash Screen API and I can't figure out how to reproduce the splash screen above in Android 12. It seems that it is always cropped and turns out like this on Android 12:

Splash screen on Android 12

This is my android/src/main/res/values/styles.xml for older Android versions (e.g. Android 11):

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <style name="LaunchTheme" parent="@android:style/Theme.Light.NoTitleBar">
        <item name="android:windowBackground">@drawable/launch_background</item>
        <item name="android:windowFullscreen">false</item>
    </style>
    <style name="NormalTheme" parent="@android:style/Theme.Light.NoTitleBar">
        <item name="android:windowBackground">?android:colorBackground</item>
    </style>
</resources>

This is my android/src/main/res/values-v31/styles.xml for Android 12:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <style name="LaunchTheme" parent="@android:style/Theme.Light.NoTitleBar">
        <item name="android:windowSplashScreenAnimatedIcon">@drawable/launch_background</item>
        <item name="android:windowFullscreen">false</item>
    </style>
    <style name="NormalTheme" parent="@android:style/Theme.Light.NoTitleBar">
        <item name="android:windowBackground">?android:colorBackground</item>
    </style>
</resources>

The only difference between the two styles.xml is that I use android:windowSplashScreenAnimatedIcon for Android 12 and android:windowBackground for older Android versions as stated in the documentation for the new splash screen API (https://developer.android.com/guide/topics/ui/splash-screen).

Both styles.xml use @drawable/launch_background which is defined in android/src/main/res/drawable/launch_background.xml as follows:

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item>
        <bitmap android:gravity="fill" android:src="@drawable/background"/>
    </item>
    <item>
        <bitmap android:gravity="center" android:src="@drawable/splash"/>
    </item>
</layer-list>

@drawable/background is just a .png with a single white pixel (1x1) and splash.png (1280x721) is the actual image I want to show in the splash screen which should not be cropped. I uploaded both files here: https://i.sstatic.net/x3QU9.jpg

With the new Android 12 Splash Screen API, is it even possible to get a splash screen which is identical to the result I got with Android 11 (no cropping of the background image)? If yes, how is that possible?


Solution

  • No, it's not possible. The goal of the new splash screen is to unify the Splash Screen UX and the cropping is part of the design.