Говорят, что первое впечатление – самое важное.
В отношении мобильных приложений, первое впечатление создаётся с помощью экранов-заставок. Однако заставки на Android с самого начала имели проблемы.
В Android очень много API, позволяющих выполнять те или иные задачи, но в случае с экранами-заставками API для их создания не было. В результате приложения реализовывали свои заставки по-разному, и, конечно же, это привело к отсутствию единообразия во всей экосистеме.
Именно эту проблему пытается решить SplashScreen Compat API. Единообразие при работе с заставками на всех версиях ОС и уменьшение количества работы для разработчиков при реализации функций.
Подключение
Добавьте зависимость в build.gradle модуля приложения (не забудьте проверить на наличие последней версии).
implementation 'androidx.core:core-splashscreen:1.0.0-alpha02'
Обратите внимание, что библиотека требует от вас использовать compileSdkVersion 31 или выше.
Настройка
Способ настройки заставки немного необычный. Вы создаёте кастомную тему и устанавливаете для этой темы атрибуты.
<!-- 1. -->
<style name="Theme.App.Starting" parent="Theme.SplashScreen">
<!-- 2. -->
<item name="windowSplashScreenBackground">@color/[...]</item>
<!-- 3. -->
<item name="windowSplashScreenAnimatedIcon">@drawable/[...]</item>
<item name="windowSplashScreenAnimationDuration">200</item>
<!-- 4. -->
<item name="android:windowSplashScreenIconBackgroundColor">
@color/[...]
</item>
<!-- 5. -->
<item name="android:windowSplashScreenBrandingImage">
@drawable/[...]
</item>
<!-- 6. -->
<item name="postSplashScreenTheme">@style/Theme.App</item>
</style>

- Новая тема, которая будет использована для заставки. Она должна наследовать от Theme.SplashScreen. В этом примере тема, используемая во всём приложении, называется Theme.App, поэтому создаётся новая тема Theme.App.Starting.
- Цвет, который будет использоваться в качестве сплошного цвета фона на экране-заставке.
- Иконка для заставки. Если не задано, вместо него будет использоваться иконка приложения. Обратите внимание, что это может быть анимированная иконка, реализованная с помощью AnimationDrawable или AnimatedVectorDrawable (в API 31 и ниже AnimatedVectorDrawable не поддерживается). Продолжительность анимации необходимо указать, если вы используете анимированную иконку.
- Цвет фона иконки. Полезно в случае, если хочется изменить контраст между цветом фона заставки и цветом иконки.
- Необязательное изображение бренда, которое будет отображаться внизу экрана (однако, документация не рекомендует использовать его).
- Собственно тема приложения, которая будет использоваться, когда заставка исчезнет.
Использование
В AndroidManifest.xml вашего приложения замените текущую тему приложения на новую созданную.
<manifest> <application android:theme="@style/Theme.App.Starting"> [...]
<manifest> <activity android:theme="@style/Theme.App.Starting"> [...]
Затем установите заставку перед setContentView().
class MainActivity : Activity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
installSplashScreen()
setContentView(R.layout.main_activity)
[...]
Как правило, основной причиной отображения заставки является завершение процесса инициализации. Вы можете определить условие, которое необходимо для того, чтобы скрыть заставку, чтобы заставка сохранялась столько времени, сколько необходимо.
[...]
installSplashScreen()
.setKeepVisibleCondition {
viewModel.isInitializationComplete()
}
[...]
Кроме того, вы можете настроить анимацию выхода из заставки, но, на мой взгляд, в этом нет необходимости, и вам нужно как можно скорее скрывать заставку (даже малейшая задержка может быть создать у пользователя впечатление о медленной работе приложения).
Надеюсь, вы получили представление о AndroidX SplashScreen Compat и можете сделать запуск своего приложения единообразным на любой версии ОС.
Удачного кодинга!

