How do I make a splash screen? [closed] How do I make a splash screen? [closed] android android

How do I make a splash screen? [closed]


Note this solution will not let the user wait more: the delay of the splash screen depends on the start up time of the application.

When you open any android app you will get by default a some what black screen with the title and icon of the app on top, you can change that by using a style/theme.

First, create a style.xml in values folder and add a style to it.

<style name="splashScreenTheme" parent="@android:style/Theme.DeviceDefault.Light.NoActionBar">    <item name="android:windowBackground">@drawable/splash_screen</item></style>

Instead of using @android:style/Theme.DeviceDefault.Light.NoActionBar you can use any other theme as a parent.

Second, in your app Manifest.xml add android:theme="@style/splashScreenTheme" to your main activity.

<activity        android:name="MainActivity"        android:label="@string/app_name"        android:theme="@style/splashScreenTheme" >

Third, Update your theme in your onCreate() launch activity.

protected void onCreate(Bundle savedInstanceState) {    // Make sure this is before calling super.onCreate    setTheme(R.style.mainAppTheme);    super.onCreate(savedInstanceState);}

UPDATECheck out this post.

Thanks to @mat1h and @adelriosantiago


Further reading:

Old answer:

HOW TO: Simple splash screen

This answers shows you how to display a splash screen for a fixed amount of time when your app starts for e.g. branding reasons. E.g. you might choose to show the splash screen for 3 seconds. However if you want to show the spash screen for a variable amount of time (e.g. app startup time) you should check out Abdullah's answer https://stackoverflow.com/a/15832037/401025. However be aware that app startup might be very fast on new devices so the user will just see a flash which is bad UX.

First you need to define the spash screen in your layout.xml file

  <?xml version="1.0" encoding="utf-8"?>  <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"          android:orientation="vertical" android:layout_width="fill_parent"          android:layout_height="fill_parent">          <ImageView android:id="@+id/splashscreen" android:layout_width="wrap_content"                  android:layout_height="fill_parent"                  android:src="@drawable/splash"                  android:layout_gravity="center"/>          <TextView android:layout_width="fill_parent"                    android:layout_height="wrap_content"                    android:text="Hello World, splash"/>  </LinearLayout>

And your activity:

import android.app.Activity;import android.content.Intent;import android.os.Bundle;import android.os.Handler;public class Splash extends Activity {    /** Duration of wait **/    private final int SPLASH_DISPLAY_LENGTH = 1000;    /** Called when the activity is first created. */    @Override    public void onCreate(Bundle icicle) {        super.onCreate(icicle);        setContentView(R.layout.splashscreen);        /* New Handler to start the Menu-Activity          * and close this Splash-Screen after some seconds.*/        new Handler().postDelayed(new Runnable(){            @Override            public void run() {                /* Create an Intent that will start the Menu-Activity. */                Intent mainIntent = new Intent(Splash.this,Menu.class);                Splash.this.startActivity(mainIntent);                Splash.this.finish();            }        }, SPLASH_DISPLAY_LENGTH);    }}

Thats all ;)


  • Create an activity: Splash
  • Create a layout XML file: splash.xml
  • Put UI components in the splash.xml layout so it looks how you want
  • your Splash.java may look like this:

    public class Splash extends Activity {    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.splash);        int secondsDelayed = 1;        new Handler().postDelayed(new Runnable() {                public void run() {                        startActivity(new Intent(Splash.this, ActivityB.class));                        finish();                }        }, secondsDelayed * 1000);    }}
  • change ActivityB.class to whichever activity you want to start after the splash screen

  • check your manifest file and it should look like

        <activity            android:name=".HomeScreen"            android:label="@string/app_name">             </activity>        <activity            android:name=".Splash"            android:label="@string/title_activity_splash_screen">                 <intent-filter>                <action android:name="android.intent.action.MAIN" />                <category android:name="android.intent.category.LAUNCHER" />            </intent-filter>        </activity>