SplashScreen Compat: единообразие заставок

Говорят, что первое впечатление – самое важное.

В отношении мобильных приложений, первое впечатление создаётся с помощью экранов-заставок. Однако заставки на 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>

  1. Новая тема, которая будет использована для заставки. Она должна наследовать от Theme.SplashScreen. В этом примере тема, используемая во всём приложении, называется Theme.App, поэтому создаётся новая тема Theme.App.Starting.
  2. Цвет, который будет использоваться в качестве сплошного цвета фона на экране-заставке.
  3. Иконка для заставки. Если не задано, вместо него будет использоваться иконка приложения. Обратите внимание, что это может быть анимированная иконка, реализованная с помощью AnimationDrawable или AnimatedVectorDrawableAPI 31 и ниже AnimatedVectorDrawable не поддерживается). Продолжительность анимации необходимо указать, если вы используете анимированную иконку.
  4. Цвет фона иконки. Полезно в случае, если хочется изменить контраст между цветом фона заставки и цветом иконки.
  5. Необязательное изображение бренда, которое будет отображаться внизу экрана (однако, документация не рекомендует использовать его).
  6. Собственно тема приложения, которая будет использоваться, когда заставка исчезнет.

Использование

В 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 и можете сделать запуск своего приложения единообразным на любой версии ОС.

Удачного кодинга!

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *