Android 12+ · AndroidX

Android Splash Screen: SplashScreen API Setup and Sizes

Short answer

Since Android 12 every app gets a system splash screen: a centered icon on a solid color. Add androidx.core:core-splashscreen, make a theme with parent Theme.SplashScreen, and call installSplashScreen() before super.onCreate(). The icon is 288×288 dp with the logo inside a 192 dp circle.

Checked against Android: Splash screens and Android: Migrate to the SplashScreen API in October 2026.

Icon sizes

ImageCanvasVisible circleAt xxxhdpi
Icon, no icon background288×288 dp192 dp1152×1152 px, 768 px circle
Icon with icon background240×240 dp160 dp960×960 px, 640 px circle
Animated icon (AVD)432 dp area288 dp—
Branding image (bottom)200×80 dp—800×320 px

Anything outside the circle is masked. Google recommends against a branding image.

1. Add the dependency

app/build.gradle.kts
dependencies {
    implementation("androidx.core:core-splashscreen:1.2.0")
}

The compat library brings the Android 12 splash screen to every device from API 23.

2. Create the theme

res/values/themes.xml
<style name="Theme.App.Starting" parent="Theme.SplashScreen">
    <item name="windowSplashScreenBackground">@color/splash_background</item>
    <item name="windowSplashScreenAnimatedIcon">@drawable/splash_icon</item>
    <item name="postSplashScreenTheme">@style/Theme.App</item>
</style>
AttributeWhat it does
windowSplashScreenBackgroundOne solid color, no transparency
windowSplashScreenAnimatedIconThe center icon (a drawable or an AVD)
windowSplashScreenAnimationDurationNeeded only for Android 12 (API 32) with an animated icon
windowSplashScreenIconBackgroundColorA circle behind the icon, for contrast. Use parent Theme.SplashScreen.IconBackground.
postSplashScreenThemeRequired: your app's normal theme
AndroidManifest.xml
<activity
    android:name=".MainActivity"
    android:theme="@style/Theme.App.Starting">

3. Install it in your activity

MainActivity.kt
class MainActivity : ComponentActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        val splashScreen = installSplashScreen()
        super.onCreate(savedInstanceState)

        // Keep it on screen until data is ready
        splashScreen.setKeepOnScreenCondition { viewModel.isLoading.value }

        setContent { App() }
    }
}

Without a condition, the splash closes as soon as the app draws its first frame.

Android splash screen not showing: fixes

You seeWhyFix
No splash when reopening the appA hot start never shows the splashExpected. Swipe the app away and cold start it.
Splash config ignoredinstallSplashScreen() runs after super.onCreate()Call it before super.onCreate()
Wrong theme after the splashpostSplashScreenTheme missingPoint it at your app theme
Logo cut offLogo outside the 192 dp (or 160 dp) circleShrink it to fit the circle
Logo hard to seeLow contrast with the backgroundAdd windowSplashScreenIconBackgroundColor
Old full-screen splash still shows firstA separate splash activityRemove it; the system splash replaces it

FAQ

What size is the Android splash screen icon?

288×288 dp with the logo in a 192 dp circle, or 240×240 dp in a 160 dp circle if you add an icon background.

Can I use a full-screen image?

Not with the system splash. It shows one centered icon on a solid color.

How long can the animation be?

Google recommends up to 1,000 ms, with a start delay of at most 166 ms.

Does it work below Android 12?

Yes, with core-splashscreen, from API 23.

How do I keep it on screen while loading?

splashScreen.setKeepOnScreenCondition { … } returns true until you're ready.