前言
Android 为我们提供了 android:windowBackground 的解决方案,我们可以专门为 SplashActivity 设置一个背景来避免 创建空白(黑色) 窗口这一步骤的尴尬,而对于 android:windowBackground 又延伸了各种各样的方案。
纯色背景 + 启动图标
使用layer-list绘制一个纯色的背景加一个启动图标。layer-list 代码如下:
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@color/colorPrimary" />
<item>
<bitmap
android:gravity="center"
android:src="@mipmap/ic_launcher" />
</item>
</layer-list>
为启动页创建主题:
<resources>
<!-- 基本主题 -->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
</style>
<!--纯色加启动图标的方案-->
<style name="SplashThemeLayer" parent="AppTheme">
<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>
<item name="android:windowBackground">@drawable/bg_splash_layer_list</item>
</style>
</resources>
设置背景图片
启动页是一张图片时,可以设置一个和启动页一样的图片代替黑白屏。
正常的主题
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
</style>
启动页主题
<style name="FirstTheme" parent="AppTheme">
<item name="android:windowNoTitle">true</item>
<item name="android:windowBackground">@mipmap/enjoylife</item>
<item name="colorPrimaryDark">@color/translate</item>
<item name="windowNoTitle">true</item><!--无标题-->
<item name="android:windowFullscreen">true</item><!--全屏-->
<item name="android:windowIsTranslucent">true</item><!--半透明-->
</style>
启动页 Activity,不设置界面,只要跳转即可 ``` class SplashActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
window.decorView.postDelayed({
startActivity(Intent(this@SplashActivity,MainActivity::class.java))
finish()
},2500)
} }
需要注意的是:Splash 页面的背景颜色需要设置为透明 #00000000,不要设置其他背景,否则会导致图片的伸缩变形。用这种方式又带了了另外一个问题:图片的内存占用和 OOM,像这种启动页面的,基本上都是直接打包在 APP 中的,而色彩越是丰富,图片的体积就越大,大多数情况下我们是无法反驳的,我们可以通过压缩图片的方式来尽量减少图片的体积,这里推荐一个 png 压缩网站:[tinypng](https://link.ld246.com/forward?goto=https%3A%2F%2Ftinypng.com%2F),基本上能把我们拿到的设计图减少一半以上的体积。
<a name="nRqyy"></a>
### 设置启动页透明
效果不如设置图片好,启动界面设置想要的界面,在启动主题里面将图片换成透明背景色即可。
更炫酷的方式
直接参考 github 源码,onboarding-examples-android。
新版本测试
发现只要在主题中设置了无论哪种,打开 app 时都会直接显示首页,基本看不到白屏或黑屏,也看不到设置的背景图等。不设置的情况下,黑白屏也只是一闪而过,可能新的系统有过这方面的处理。
参考
Android启动白屏原因及解决方案
Android 之路 - 冷启动解决方案:实现秒开
5分钟教你打造一个秒开的 Android App
Android启动页黑屏及最优解决方案
Android:启动页—最佳实践