Здравствуйте, друзья!
Это мой первый пост, поэтому я начну со статьи для начинающих о разработке 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