Всплывающий экран для Android

Здравствуйте, друзья!
Это мой первый пост, поэтому я начну со статьи для начинающих о разработке Android.

Задумываясь о любом приложении Android, которое мы используем в наши дни, первое, на что мы обращаем внимание, – это всплеск экрана. С самого начала моего пути в Android-разработку я всегда испытывал трудности с поиском правильного способа разработки. Эта “проблема” закончилась в конце прошлого года, когда появился официальный способ, предоставленный командой разработчиков Android.

Примечание: В этой статье я покажу только язык Kotlin, потому что с 2019 года разработка Android ведется по принципу “Android’s Kotlin-first”, но можно использовать и Java.

Давайте начнем наш проект!

Проект

Для создания проекта вам нужно будет просто выполнить следующие шаги:

  • Create New Project > Empty Compose Activity
  • Конфигурация проекта (имя, пакет и т.д.)

После этой части вы будете готовы внедрить Splash Screen в свой проект.

Настройки

Теперь нам нужно установить некоторые конфигурации в нашем проекте.

Build.gradle

Ваш compileSdk должен быть не ниже 31, и вам нужно добавить зависимость Splash Screen.

android {
   compileSdkVersion 32
   //Other configuration
}
dependencies {
   //Other dependencies
   implementation 'androidx.core:core-splashscreen:1.0.0-rc01'
}
Войти в полноэкранный режим Выход из полноэкранного режима

Тема

Необходимо создать новую тему, и для этого вы можете следовать приведенному ниже примеру:
Родитель вашей темы должен быть Theme.SplashScreen, который является темой из системы Android. Также необходимо установить тему следующей активности в атрибуте postSplashScreenTheme.

<style name="Theme.App.SplashScreen" parent="Theme.SplashScreen">
        <!-- Set the splash screen background, animated icon, and animation duration. -->
        <item name="windowSplashScreenBackground">@color/white</item>

        <!-- Use windowSplashScreenAnimatedIcon to add either a drawable or an
             animated drawable. One of these is required. -->
        <item name="windowSplashScreenAnimatedIcon">@drawable/ic_duck</item>
        <!-- Required for animated icons -->
        <!-- <item name="windowSplashScreenAnimationDuration">5000</item> -->

        <!-- Set the theme of the Activity that directly follows your splash screen. -->
        <!-- Required -->
        <item name="postSplashScreenTheme">@style/Theme.SplashScreenApp</item>
</style>
Вход в полноэкранный режим Выход из полноэкранного режима

Примечание 1: Если вы хотите добавить цвет фона для вашей иконки, вы можете использовать следующую тему Theme.SplashScreen.IconBackground и использовать атрибут windowSplashScreenIconBackground.

Примечание 2: Атрибут windowSplashScreenAnimationDuration используется только для анимации. Для изображений он не нужен.

Манифест

Теперь вам нужно добавить эту новую тему в ваше приложение или активность. Я предпочитаю добавлять в активность, но это личный выбор.

<application
        android:allowBackup="true"
        android:dataExtractionRules="@xml/data_extraction_rules"
        android:fullBackupContent="@xml/backup_rules"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/Theme.SplashScreen"
        tools:targetApi="31">
        <activity
            android:name=".MainActivity"
            android:exported="true"
            android:label="@string/app_name"
            android:theme="@style/Theme.App.SplashScreen">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
</application>
Войти в полноэкранный режим Выход из полноэкранного режима

Активность

В вашей Activity вам нужно вызвать метод installSplashScreen() после super.onCreate(). Метод installSplashScreen возвращает объект Splash Screen, поэтому вы можете настроить поведение с помощью этих двух методов: setKeepOnScreenCondition и setOnExitAnimationListener. Вы можете использовать эти методы вместе или независимо друг от друга, в зависимости от потребностей вашего проекта.

setKeepOnScreenCondition

Как уже понятно из названия, этот метод будет поддерживать экран заставки до тех пор, пока что-нибудь не произойдет. В моем случае, у меня есть модель viewModel, управляющая тем, как долго он будет исчезать.

class MainActivity : ComponentActivity() {

    private val mainViewModel: MainViewModel by viewModels()

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        installSplashScreen().apply {
            setKeepOnScreenCondition {
                mainViewModel.isLoading.value
            }
        }

        setContent {
            SplashScreenTheme {
                Box(
                    modifier = Modifier.fillMaxSize(),
                    contentAlignment = Alignment.Center
                ) {
                    Text(text = "Hello World!")
                }
            }
        }
    }
}
Вход в полноэкранный режим Выход из полноэкранного режима

setOnExitAnimationListener .

В этом случае, как только ваш Splash Screen завершается, вы можете выполнить что угодно. Например, загрузить данные, проверить кэш и т.д.

class MainActivity : ComponentActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        installSplashScreen().apply {
            setOnExitAnimationListener{
                //Do something after the Splash Screen
                it.remove()
            }
        }

        setContent {
            SplashScreenTheme {
                Box(
                    modifier = Modifier.fillMaxSize(),
                    contentAlignment = Alignment.Center
                ) {
                    Text(text = "Hello World!")
                }
            }
        }
    }
}
Вход в полноэкранный режим Выйти из полноэкранного режима

Вот и все, что вам нужно для создания Splash Screen, следуя подходу официального сайта разработчиков Android.

Git-репозиторий

Github

Ссылки

Android Developers
Youtube

Оцените статью
Procodings.ru
Добавить комментарий