文章目录
- 定义主题theme
- theme配置相关属性
- 支持延伸到刘海屏&沉浸式布局
- drawable设计为layer-list方式
AndroidManifest定义theme
<activity
android:name=".modules.welcome.SplashActivity"
android:screenOrientation="portrait"
android:theme="@style/SplashTheme">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
drawable文件夹的style.xml
<!-- 防止欢迎页白屏或者黑屏,设置图片 -->
<style name="SplashTheme" parent="AppTheme">
<item name="android:background">@drawable/drawable_splash</item>
<item name="windowNoTitle">true</item>
<item name="android:windowAnimationStyle">@null</item>
<item name="android:windowFullscreen">true</item>
</style>
drawable-v28下的style.xml
用于兼容Android 9的刘海屏
<!-- 防止欢迎页白屏或者黑屏,设置图片 -->
<style name="SplashTheme" parent="AppTheme">
<item name="android:background">@drawable/drawable_splash</item>
<item name="windowNoTitle">true</item>
<item name="android:windowAnimationStyle">@null</item>
<item name="android:windowFullscreen">true</item>
<!--不让windowBackground延申到navigation bar区域-->
<item name="android:windowDrawsSystemBarBackgrounds">false</item>
<item name="android:windowTranslucentNavigation">true</item>
<!--适配Android P刘海屏-->
<item name="android:windowLayoutInDisplayCutoutMode">shortEdges</item>
</style>
drawable_splash.xml
定义冷启动的背景,为了适配,采用layer-list
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<color android:color="@color/common_white_color" />
</item>
<item android:bottom="175dp">
<bitmap
android:gravity="center_vertical|left"
android:src="@drawable/pic_splash_icon" />
</item>
<item android:bottom="50dp">
<bitmap
android:gravity="center_horizontal|bottom"
android:src="@drawable/pic_splash_logo" />
</item>
</layer-list>
指定刘海屏显示模式
Google 为刘海屏显示方式提供了三种显示模式:
// 默认情况,全屏页面不可用刘海区域,非全屏页面可以进行使用
public static final int LAYOUT_IN_DISPLAY_CUTOUT_MODE_DEFAULT = 0;
// 允许页面延伸到刘海区域
public static final int LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES = 1;
// 不允许使用刘海区域
public static final int LAYOUT_IN_DISPLAY_CUTOUT_MODE_NEVER = 2;
style.xml 中配置theme属性
<item name="android:windowLayoutInDisplayCutoutMode">shortEdges</item>
代码中指定
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
WindowManager.LayoutParams lp = getWindow().getAttributes();
lp.layoutInDisplayCutoutMode = WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES;
getWindow().setAttributes(lp);
}