How do I make a splash screen?

I wanted to make my app look more professional, so I decided that I wanted to make a splash screen.

How would I create it and then implement it?


Further reading:

  • App Launch time & Themed launch screens (Android Performance Patterns Season 6 Ep. 4)
  • Splash screen in Android: The right way
  • 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 eg branding reasons. Eg 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 (eg 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 ;)


    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);
    }
    

    UPDATE Check out this post https://plus.google.com/+AndroidDevelopers/posts/Z1Wwainpjhd Thanks to @mat1h and @adelriosantiago


  • 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>
    
    链接地址: http://www.djcxy.com/p/66790.html

    上一篇: 在iOS Splash Screen中会发生什么?

    下一篇: 我如何制作启动画面?