启动页的适配
-
问题
当应用启动的时候,系统会判断当前应用的进程是否已被创建,若没有创建则需要为这个引用创建一个进程,并且初始化Application,那这都需要一定的时间的,而系统为了让用户知道已经点击了应用图标,所以会创建一个白色或黑色窗口(Window),直到Application初始化完成才进入启动页(也就是我们说的冷启动),这样会大大的减少用户的体验感
-
解决方案1
* 为了避免在应用启动的时候会出现白色/黑色的窗口一段时间,我们可以为启动页设置Theme,在Theme中我们为android:windowBackground设置一张图片,这张图片最好和启动页的背景图一样,这样就不会产生切换的视觉感,SplashActivity也就可以不用设置View了 //1.在values下的style.xml中设置一个主题 <style name="AppTheme.Splash" parent="Theme.AppCompat.Light.NoActionBar"> <item name="android:windowFullscreen">true</item> <item name="android:windowBackground">@drawable/splash_bg</item> </style> //2.在values-v21下的style.xml中设置一个主题 <style name="AppTheme.Splash" parent="Theme.AppCompat.Light.NoActionBar"> <item name="android:windowFullscreen">true</item> <item name="android:windowBackground">@drawable/splash_bg</item> <item name="android:windowDrawsSystemBarBackgrounds">false</item> </style> //3.在清单文件中为启动页配置主题 <activity android:name=".ui.activity.SplashActivity" android:screenOrientation="portrait" android:theme="@style/AppTheme.Splash"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> //4.启动页设置 class SplashActivity :AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) doSplashTask() } }
-
存在的问题
* 这张图片一般我们会切不同分辨率的,但是因为碎片化的问题,特别全面屏出来后,各种分辨率使得我们切的尺寸图无法完全的去覆盖,在一些机型上也会出现被拉伸或变形的情况,若为了单独一个屏幕切一张图片去适配,无论是工作量还是项目的体积都会大大增加的
-
那么如何解决优化呢?
* 那么上面的方案已经部分解决了启动页的适配问题以及应用启动体验的问题,现在只要解决在屏幕上拉伸的问题就好了,那这时候我们可以考虑使用.9图片,.9的图片可以在尺寸不足的时候,自动根据扩展需要进行拉伸,这样就不会造成在不同的屏幕上会造成拉伸变形的问题,针对现在的屏幕包括全面屏,其实我们直到设置在drawable-xxdpi下放一张1920*1080的.9图片就可以了
- 适配后的效果图