启动页适配分为三个点:
- 背景图:(拉伸问题)
- 状态栏:(状态栏透明、半透明、不透明)
- 导航栏:(是否需要透明)
- 内容跳动:(开屏图片与启动页背景切换时产生)
一、背景图:
背景图适配,启动图效果图一般都是一个可以循环的背景,比如.9图,或着其它组合图,项目内置有限的图片资源适配所有屏。
.9图或着矢量图,只需要一张图当作启动图就可以了,如果是组合图,可以使用drawable文件,组合自己想要的效果就可以了。
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<bitmap android:src="@drawable/splash_bg" android:gravity="fill_vertical"/>
</item>
</layer-list>
有的应用可能需要一张海报等无法循环拉伸的启动图时,只能放一张尽量大的图,来尽量适配了。
二、状态栏:
状态栏分为三种:不透明、半透明、全透明
- 不透明:就不说了。
- 半透明:这种状态也不是最好的一种文案,实现方法比全透明要省几行代码,要求不高可以使用
直接上代码
<style name="SplashTheme" parent="Theme.AppCompat.Light.NoActionBar">
<!-- 背景图 -->
<item name="android:windowBackground">@mipmap/splash_bg</item>
<!-- 状态栏透明 -->
<item name="android:windowTranslucentStatus">true</item>
<!-- 状态栏颜色:透明 -->
<item name="android:statusBarColor">@android:color/transparent</item>
</style>
这样设置的状态是半透明的
3. 全透明
如果设置全透明,为了分享状态上的文字与应用内容颜色重全,系统默认会为状态栏添加一个半透明层,这样就不会由于应用内颜色导致看不清时间、信号等状态内信息。
解决办法就是不设置状态栏透明,系统就不会添加半透明层,但状态栏颜色设置为透明
<style name="SplashTheme" parent="Theme.AppCompat.Light.NoActionBar">
<item name="android:windowBackground">@mipmap/splash_bg</item>
<item name="android:statusBarColor">@android:color/transparent</item>
</style>
只要上面两行配置,这样状态栏是透明的,背景图还没有被遮挡。效果如下:
启动图解决了状态栏,但这样配置有个问题,就是内容无法显示到状态的位置。
如果启动Activity的布局需要显示在状态栏下面,则只能在代码中实现,这是状态栏全透明比半透明多的几行代码,代码需要放到onCreate方法前执行
//状态栏透明
window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN)
//状态栏、导航栏都透明(导航栏是半透明,导航栏无法做到全透明,在个别机型系统中是全透明)
window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION)
三、导航栏透明:
导航栏透明也只能做到半透明,在一些机型上是全透明,这点不要纠结全透明问题了,看了几十款磊厂的App,都是这样。
半透明比不透明好在消失的动画更自然。适情况使用,如果启动页底色正好是纯色,可以设置导航栏为底色,这样更自然,像腾讯视频,实现方式就是白色导航,启动时导航栏消失后显示版号,效果比导航栏透明要好很多。
实现方式
<style name="SplashTheme" parent="Theme.AppCompat.Light.NoActionBar">
<item name="android:navigationBarColor">@android:color/transparent</item>
<item name="android:windowTranslucentNavigation">true</item>
</style/>
代码中实现:
//状态栏、导航栏都透明(导航栏是半透明,导航栏无法做到全透明,在个别机型系统中是全透明)
window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION)
四、内容跳转
在适配开屏页时,应用启动时首先会加载window的背景图,当应用启动起来会切换到启动Acitivity的页面,会了无感知切换,我们一般会让这两个页面的背景效果一致,如果两个内容不致就会产生跳动的效果,一般产生的原因是:
导航栏或状态栏的透明引起的。导航栏的问题居多,启动图显示的区域是全屏,包含导航栏和状态栏的高度,如果启动Acivity的透明效果设置问题就会导致图片裁剪方式不一致,产生跳动问题。
至此全部内容都结束了。
具体怎么使用,根据自己的需求配置状态栏和导航栏显示效果。
在这里把原图展示出来