欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Android splash的实现

程序员文章站 2022-03-11 15:40:55
目录一、Splash的作用二、Splash的三种实现1、SplashActivity2、MainActivity中控制view的显示3、设置Application或者MainActivity的主题三、总结一、Splash的作用最近做flutter项目,由于app启动时需要初始化flutter引擎,这个过程比较耗时,会有较长时间的白屏(或黑屏,跟设置的application、activity的theme有关),用户体验不太好,于是需要加一个splash页面。那什么时候需要用到splash呢?1、启动阶段...

一、Splash的作用

最近做flutter项目,由于app启动时需要初始化flutter引擎,这个过程比较耗时,会有较长时间的白屏(或黑屏,跟设置的application、activity的theme有关),用户体验不太好,于是需要加一个splash页面。
那什么时候需要用到splash呢?1、启动阶段有耗时的初始化操作,影响到了用户体验;2、需要展示公司logo、广告等信息。

二、Splash的三种实现

1、SplashActivity

将SplashActivity作为app启动的第一个activity,SplashActivity启动后延时一段时间跳转到MainActivity。网上可以搜到很多实现,这里就不展开了。

2、MainActivity中控制view的显示

将MainActivity作为app启动的第一个activity,MainActivity启动后先展示SplashView,延迟一段时间将SplashView隐藏并显示主页面。

3、设置Application或者MainActivity的主题

  • AndroidManifest.xml
<!-- 设置theme属性 -->
<application
       android:icon="@mipmap/ic_launcher"
       android:label="@string/app_name"
       android:name="com.xxx.MyApplication"
       android:theme="@style/my.NoTitleBar.Theme">
       
       <!-- 设置theme属性 -->
       <activity
           android:screenOrientation="portrait"
           android:name="com.xxx.views.MainActivity"
           android:theme="@style/my.NoTitleBar.Theme"
           android:configChanges="orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode"
           android:windowSoftInputMode="adjustResize">
           <intent-filter>
               <action android:name="android.intent.action.MAIN" />
               <category android:name="android.intent.category.LAUNCHER" />
           </intent-filter>
       </activity>

   </application>
  • res/values/styles.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
   <style name="my.NoTitleBar.Theme" parent="@android:style/Theme.Light.NoTitleBar">
       <!-- android:windowBackground用drawable的layer-list标签实现,通用性比纯图片要好 -->
       <item name="android:windowBackground">@drawable/splash_bg</item>
   </style>
</resources>
  • res/drawable/splash_bg.xml
<?xml version="1.0" encoding="utf-8"?><!-- Modify this file to customize your launch splash screen -->
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">

    <item>
        <shape android:shape="rectangle">
            <solid android:color="@android:color/white" />
        </shape>
    </item>

    <!--单独的slogan图片 并且设置下间距-->
    <item android:bottom="40dp">
        <bitmap
            android:gravity="bottom"
            android:src="@drawable/launch_splash" />
    </item>

</layer-list>

三、总结

前两种实现,在app初始化耗时的情况下,依旧会闪现白屏。而设置Application或者MainActivity的主题可以避免闪现白屏,但是无法设置延迟时间,适用于“启动阶段有耗时的初始化操作,影响到了用户体验”。若是需要使公司logo、广告等信息展示固定时间,则可以将设置主题和SplashActivity(或MainActivity中控制view的显示)结合使用来实现。

【参考文档】

  1. https://www.zhihu.com/question/29424875
  2. https://blog.csdn.net/qq_36455052/article/details/78429713

本文地址:https://blog.csdn.net/u011451706/article/details/111697903