Подход с использованием новейшего API
Android выпустил официальную поддержку для отображения экрана-заставки.
Эта новая поддержка экрана-заставки добавлена в Android 12, но ее можно использовать и в более ранних версиях Android с помощью библиотеки поддержки экрана-заставки.
Чтобы продемонстрировать различные аспекты API экрана-заставки, я создал пример приложения с помощью Jetpack Compose (окончательный предварительный просмотр экрана-заставки).
Давай начнем!
Шаг 1
Начнем с добавления заставки зависимость.
implementation 'androidx.core:core-splashscreen:1.0.0-alpha02'
Шаг 2
Следующими шагами будет создание значка заставки и необязательного изображения бренда.
Позже мы обсудим, как создать значок заставки и сделать так, чтобы он отображался в центре экрана — в разделе Extras
внизу экрана.
Шаг 3
Как только у нас будет готовый ресурс изображения, мы можем применить его, используя тему экрана-заставки.
<style name="Theme.Splash.Starting" parent="Theme.SplashScreen"> <item name="windowSplashScreenBackground"> @color/splash_screen_background </item> <item name="windowSplashScreenAnimatedIcon"> @drawable/ic_splash_icon </item> <item name="windowSplashScreenAnimationDuration"> @integer/splash_screen_animation_duration </item> <item name="postSplashScreenTheme"> @style/Theme.App.NoActionBar </item> <!--Android 12 specific styles (put this in values-v31) --> <item name="android:windowSplashScreenBrandingImage"> @drawable/ic_brand_icon </item> <!--Android 12 specific styles (put this in values-v31) --> </style>
Давайте посмотрим на атрибуты стиля.
windowSplashScreenBackground
— Как вы уже, наверное, догадались, это цвет фона, который будет занимать весь экран.
windowSplashScreenAnimatedIcon
— Это может быть обычный векторный значок или анимированный векторный значок. Примечание. Анимированный векторный значок будет отображать анимацию только на устройствах Android 12+, более старые устройства API будут отображать только статический значок без анимации.
windowSplashScreenAnimationDuration
— Продолжительность анимированной иконки. Рекомендуемая продолжительность составляет 1000 миллисекунд.
postSplashScreenTheme
— Эта тема используется после загрузки приложения.
Это необходимо, потому что мы установим тему активности запуска как Theme.SplashScreen
в манифесте приложения, что отлично подходит для отображения заставки, анимированного логотипа и значка бренда. . Однако, как только приложение будет загружено, мы получим исключение, если не используем Theme.AppCompat
или Theme.MaterialComponents
. Следовательно, этот атрибут приходит на помощь.
windowSplashScreenBrandingImage
— изображение бренда для отображения нижней части экрана (доступно только с Android 12).
Шаг 4
Теперь установите тему активности запуска как Theme.Splash.Starting
<activity android:name=".MainActivity" android:exported="true" android:label="@string/app_name" android:theme="@style/Theme.Splash.Starting"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity>
Шаг 5
И, наконец, внутри метода MainActivity onCreate
добавьте installSplashScreen()
override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) installSplashScreen() setContent { AndroidSplashScreenTheme { Greeting("Android splash screen demo") } } }
Другие особенности
Теперь, когда мы завершили настройку нашего нового экрана-заставки Android, теперь мы можем взглянуть на другие его функции.
Управляйте видимостью заставки.
API экрана-заставки поддерживает отображение экрана-заставки столько, сколько нам нужно.
Допустим, нам нужно получить некоторые ресурсы, которые имеют решающее значение для рендеринга нашего экрана, и без этих ресурсов нет смысла показывать пользовательский интерфейс. В этом случае мы можем отложить показ пользовательского интерфейса нашего приложения до тех пор, пока наши ресурсы не будут извлечены и готовы.
installSplashScreen().setKeepVisibleCondition { mainViewModel.isScreenLoading.value }
setKeepVisibleCondition
Этот метод принимает обратный вызов, который возвращает логическое значение, чтобы сказать, оставить ли экран включенным или нет. Значение true указывает, что экран-заставка должен оставаться как есть, а значение False указывает на удаление экрана-заставки.
SplashScreen API будет регулярно вызывать этот обратный вызов, чтобы проверить, следует ли сохранить экран-заставку или закрыть его.
Анимация содержимого экрана при закрытии экрана-заставки
installSplashScreen() .setOnExitAnimationListener { splashScreenViewProvider -> // Animation code }
Дополнительно
Давайте обсудим, как создать изображение заставки.
Как мы видим на значке заставки, section 1
замаскировано section 3
.
Если мы применим нашу иконку как есть, она уменьшится и растянется.
Итак, как мы это исправим? Нам нужно создать иконку, соответствующую этому замаскированному отступу.
Допустим, у нас есть значок экрана-заставки размером 54x54
, тогда мы создадим слой-оболочку размером 108x108
(удвоение реального значка) и поместим содержимое значка в его центр.
Пример
<?xml version="1.0" encoding="utf-8"?> <vector xmlns:android="http://schemas.android.com/apk/res/android" android:name="vector" android:width="108dp" android:height="108dp" android:viewportWidth="108" android:viewportHeight="108"> <!--Optional background spanning full 108x108 dp--> <path android:name="background" android:pathData="M 0 0 L 108 0 L 108 108 L 0 108 Z" android:fillColor="@color/splash_icon_background" android:strokeWidth="1"/> <!--Splash screen icon placed in the centre of the screen--> <group android:name="group_icon" android:pivotX="54" android:pivotY="54"> <path android:name="path_pi" android:pathData="M 30 44.591 L......." android:fillColor="@color/splash_icon_color" android:strokeWidth="1"/> </group> </vector>
Вот и все, ребята. Спасибо за прочтение.