Post

Android - Splash screen the right way

How to use a Splash screen correctly

Well, there are a lot of blog tutorials teaching how to create a splash screen like this:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
public class SplashActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {

        ...

        new Handler().postDelayed(new Runnable() {
                    @Override
                    public void run() {
                        startActivity(new Intent(this, MainActivity.class));
                    }
                }, 3000);
    }
}

The thing is, this is nothing but a 3 seconds waisting of the user’s time!

As you can notice, Google has gotten their opinion in favor of Splash Screens on their Official Material Design Documentation
But, is this something you just put anyway on your app to make the user waste his time?
No. And Google advocated against splash screens like this, and even called it an anti-pattern on this video.
So, is there a way to make use of this pattern on the right way? The answer is, Yes!

So, how could one do to create a Splash Screen just for the amount of time the App needs to open the Main Activity?

Well, actually, it’s easy. The ingredients are:
  • An Activity for the Splash Screen (without the layout file)
  • Your Manifest: to declare you Splash Screen as the Launcher
  • One drawable file to customize the splash screen a little

    The splash view has to be ready immediately, even before you can inflate a layout file in your splash activity.

The recipe:

Create your Splash Screen Activity

SplashScreen.java

1
2
3
4
5
6
7
8
9
10
11
12
13
public class SplashActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        /** START - this is the purpose of this Activity */
        Intent intent = new Intent(this, MainActivity.class);
        startActivity(intent);
        finish();
        /** END - everything more than this is time consuming */
    }
}

activity_splash.xml

1
2
3
4
5
6
7
8
9
10
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:drawable="@color/colorGrey"/>

    <item>
        <bitmap android:gravity="center" android:src="@mipmap/ic_launcher"/>
    </item>

</layer-list>

Manifest.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.andyfriends.showcase">

    <application
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:theme="@style/AppTheme">
        <activity
            android:name=".activities.SplashActivity"
            android:label="@string/app_name"
            android:theme="@style/SplashScreen">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name=".activities.MainActivity"
            android:label="@string/app_name"
            android:theme="@style/AppTheme" />
    </application>

</manifest>

we’ve set a different Theme for the SplashActivity, so we can call our drawable resource on it

1
2
3
<style name="SplashScreen" parent="Theme.AppCompat.NoActionBar">
    <item name="android:windowBackground">@drawable/activity_splash</item>
</style>

That is it. You can clone the project using Android Studio and take a look.

Source: https://github.com/davicoradini/Android-splash-screen-the-right-way

This post is licensed under CC BY 4.0 by the author.