Android Development
Splash Screen
Responsive Design
Mobile App Development
Image Optimization

Android splash screen image sizes to fit all devices

Master System Design with Codemia

Enhance your system design skills with over 120 practice problems, detailed solutions, and hands-on exercises.

Introduction

The modern answer to Android splash screen sizing is not "export a giant bitmap for every device." On current Android, the recommended approach is to use the splash screen API, a theme-based background, and correctly sized icon assets so the system can scale them consistently.

The Big Shift: Android 12 and Later

Starting with Android 12, the system splash screen is standardized. That means you usually do not build a custom full-screen image layout as the primary launch screen anymore. Instead, you define splash styling through theme attributes.

In practice, that means:

  • use a simple background color or drawable
  • provide a properly sized app icon or splash icon
  • optionally add branded imagery
  • let the system render and animate the launch screen

This is much more reliable than trying to guess one perfect bitmap size for every phone and tablet.

Why One Static Splash Image Is Usually Wrong

The old approach was often a centered image stretched across density buckets. That caused problems:

  • cropping on tall screens
  • too much empty space on wide screens
  • blurry scaling on dense devices
  • large assets that slowed startup

The system splash screen avoids most of that by rendering predictable elements instead of a custom full-screen poster.

Current Sizing Guidance

The official guidance is based on splash icon dimensions in dp, not a table of per-device pixel sizes.

The key sizes are:

  • splash icon with background: 240 x 240 dp, with the visible icon fitting inside a 160 dp circle
  • splash icon without background: 288 x 288 dp, with the visible icon fitting inside a 192 dp circle
  • branded image: 200 x 80 dp

Those values let Android scale correctly across densities. You provide drawable assets and let the framework map them to screen density.

Theme-Based Splash Screen Setup

A modern implementation is mostly theme configuration.

xml
1<!-- res/values/themes.xml -->
2<style name="Theme.MyApp.Starting" parent="Theme.SplashScreen">
3    <item name="windowSplashScreenBackground">@color/splash_background</item>
4    <item name="windowSplashScreenAnimatedIcon">@drawable/ic_splash</item>
5    <item name="windowSplashScreenBrandingImage">@drawable/ic_branding</item>
6    <item name="postSplashScreenTheme">@style/Theme.MyApp</item>
7</style>

Then set the starting theme in the manifest:

xml
1<application
2    android:theme="@style/Theme.MyApp.Starting">
3    <activity
4        android:name=".MainActivity"
5        android:exported="true">
6        <intent-filter>
7            <action android:name="android.intent.action.MAIN" />
8            <category android:name="android.intent.category.LAUNCHER" />
9        </intent-filter>
10    </activity>
11</application>

Using the Compatibility Library

If you want one implementation that behaves sensibly on older Android versions too, use the Jetpack splash screen compatibility library.

kotlin
1import android.os.Bundle
2import androidx.activity.ComponentActivity
3import androidx.core.splashscreen.SplashScreen.Companion.installSplashScreen
4
5class MainActivity : ComponentActivity() {
6    override fun onCreate(savedInstanceState: Bundle?) {
7        installSplashScreen()
8        super.onCreate(savedInstanceState)
9        setContentView(R.layout.activity_main)
10    }
11}

This gives you a cleaner migration path than maintaining separate custom launch layouts for modern and older devices.

What To Put in the Assets

For the splash icon:

  • prefer a simple logo or mark
  • keep important content near the center
  • do not include too much text
  • avoid edge-to-edge details that will be clipped

For the branded image:

  • treat it as optional
  • keep it lightweight
  • use it for subtle branding, not for a second full logo composition

If you still use raster assets, generate density-specific versions through normal drawable resource folders. But the design should still follow the dp guidance above.

When a Full-Screen Artwork Still Makes Sense

Sometimes teams still want a highly branded intro screen after launch. That is fine, but it should be an in-app screen, not a fake replacement for the system splash screen.

That distinction matters:

  • the system splash screen covers process startup
  • your in-app intro screen covers app-specific loading or branding

Trying to combine them into one heavy launch image usually hurts startup and looks worse on more devices.

Practical Design Advice

If your only goal is "fit all devices," the safest recipe is:

  1. solid background color
  2. centered icon
  3. optional branded strip
  4. no text that must align perfectly with screen edges

That scales better than manually composing phone-sized backgrounds for every form factor.

Common Pitfalls

  • Using one giant bitmap and expecting it to look correct on every aspect ratio.
  • Designing a splash screen as if it were a full poster instead of a system-rendered launch state.
  • Packing too much text into the splash icon.
  • Ignoring Android 12+ behavior and fighting the system splash screen instead of using it.
  • Confusing dp design guidance with hardcoded per-device pixel targets.

Summary

  • Modern Android splash screens should be built around the splash screen API, not a custom full-screen image.
  • Use properly sized icon assets in dp, then let Android scale them across densities.
  • The official splash icon and branding sizes are more useful than old per-device bitmap tables.
  • Use the Jetpack compatibility library if you need consistent behavior on older versions.
  • Keep the launch screen simple and move rich branded artwork into the app itself.

Course illustration
Course illustration

All Rights Reserved.