Android 启动页适配

启动页适配分为三个点:

  1. 背景图:(拉伸问题)
  2. 状态栏:(状态栏透明、半透明、不透明)
  3. 导航栏:(是否需要透明)
  4. 内容跳动:(开屏图片与启动页背景切换时产生)

一、背景图:
背景图适配,启动图效果图一般都是一个可以循环的背景,比如.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>

有的应用可能需要一张海报等无法循环拉伸的启动图时,只能放一张尽量大的图,来尽量适配了。

二、状态栏:
状态栏分为三种:不透明、半透明、全透明

  1. 不透明:就不说了。
  2. 半透明:这种状态也不是最好的一种文案,实现方法比全透明要省几行代码,要求不高可以使用
    直接上代码
<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的透明效果设置问题就会导致图片裁剪方式不一致,产生跳动问题。

至此全部内容都结束了。
具体怎么使用,根据自己的需求配置状态栏和导航栏显示效果。
在这里把原图展示出来
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值