Android Performance Patterns s6ep4 Themed launch screens

This video identifies some pitfalls with bad ways to implement launch screens, and provides a solution that everyone can use.
link



Theme the launch screen

声明首页的Theme与App其它页面的Theme相同,视频作者对于这部分内容讲述不清,目前存疑。

Turn off the official startup window

使用Window Disable Preview来禁止显示Preview界面,这会导致启动App后依然停留在桌面,在此过程中无法响应用户操作。方法如下:

styles.xml中声明Theme

1
2
3
<style name="Theme.NoPreviewWindow" parent="Theme.AppCompat.NoActionBar">
<item name="android:windowIsTranslucent">true</item>
</style>

或者

1
2
3
<style name="Theme.NoPreviewWindow" parent="Theme.AppCompat.NoActionBar">
<item name="android:windowDisablePreview">true</item>
</style>

然后在AndroidManifest.xml中使用已经定义的Theme

1
2
3
4
5
6
7
8
9
10
11
<activity
android:name=".activities.SplashActivity"
android:label="@string/app_name"
android:theme="@style/Theme.NoPreviewWindow"
android:screenOrientation="portrait"
>
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>

The better way

通过切换Theme的手段来完成

首先声明一个以图片为背景的Theme,并且在首页Activity中应用

1
2
3
4
5
6
7
8
9
10
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" android:opacity="opaque">
<item android:drawable="@android:color/white"/>
<item>
<bitmap
android:src="@drawable/product_log_144dp"
android:gravity="center"/>
</item>
</layer-list>

<activity ...android:theme="@style/AppTheme.Launcher"/>

当首页Activity正式启动时,切换到正式的theme

1
2
3
4
5
6

protected void (Bundel savedInstanceState) {
setTheme(R.style.Theme_MyApp);
super.onCreate(savedInstanceState);

}

参考资料