Как добавить заставку

Если в вашем приложении есть заставка или тема панели запуска, перенесите его в библиотеку SplashScreen, доступную в Jetpack. Это обеспечит корректное отображение приложения во всех версиях Wear OS.

В этой статье приведены пошаговые инструкции по добавлению заставки с помощью библиотеки SplashScreen в соответствии с рекомендациями по дизайну.

Добавьте зависимости

Добавьте в файл build.gradle модуля приложения следующую зависимость:

Яркий

dependencies {
    implementation "androidx.core:core-splashscreen:1.2.0"
}

Kotlin

dependencies {
    implementation("androidx.core:core-splashscreen:1.2.0")
}

Чтобы получить поддержку стандартных размеров Wear OS, убедитесь, что вы используете версию 1.0.1 или более позднюю.

Добавление темы

Создайте тему заставки в файле res/values/styles.xml. Родительский элемент зависит от формы значка:

  • Если значок круглый, используйте Theme.SplashScreen.
  • Если значок имеет другую форму, используйте Theme.SplashScreen.IconBackground.

Используйте windowSplashScreenBackground, чтобы залить фон черным цветом. Установите для параметра postSplashScreenTheme тему, которую должно использовать действие, а для параметра windowSplashScreenAnimatedIcon – графический объект или анимированный графический объект:

<resources>
    <style name="Theme.App" parent="@android:style/Theme.DeviceDefault" />

    <style name="Theme.App.Starting" parent="Theme.SplashScreen">
        <!-- Set the splash screen background to black -->
        <item name="windowSplashScreenBackground">@android:color/black</item>
        <!-- Use windowSplashScreenAnimatedIcon to add a drawable or an animated
             drawable. -->
        <item name="windowSplashScreenAnimatedIcon">@drawable/splash_screen</item>
        <!-- Set the theme of the Activity that follows your splash screen. -->
        <item name="postSplashScreenTheme">@style/Theme.App</item>
    </style>
</resources>

Если вы используете некруглый значок, вам нужно установить под ним белый фоновый цвет. В этом случае используйте Theme.SplashScreen.IconBackground в качестве родительской темы и задайте атрибут windowSplashScreenIconBackgroundColor:

<style name="Theme.App.Starting" parent="Theme.SplashScreen">
    <!-- Set a white background behind the splash screen icon. -->
    <item name="windowSplashScreenIconBackgroundColor">@android:color/white</item>
</style>

Остальные атрибуты необязательны.

Создайте графический объект для темы

Для тем заставок требуется объект Drawable, который передается в атрибут windowSplashScreenAnimatedIcon. Например, вы можете создать его, добавив новый файл res/drawable/splash_screen.xml и используя значок панели запуска приложений и правильный размер значка заставки:

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:width="@dimen/splash_screen_icon_size"
        android:height="@dimen/splash_screen_icon_size"
        android:drawable="@mipmap/ic_launcher"
        android:gravity="center" />
</layer-list>

Размер значка на заставке определяется в res/values/dimens.xml и зависит от того, круглый ли он.

<resources>
    <!-- Round app icon can take all of default space -->
    <dimen name="splash_screen_icon_size">48dp</dimen>
</resources>

…или некруглые, поэтому для них нужно использовать фон значка:

<resources>
    <!-- Non-round icon with background must use reduced size to fit circle -->
    <dimen name="splash_screen_icon_size">36dp</dimen>
</resources>

Укажите тему

В файле манифеста приложения (AndroidManifest.xml) замените тему начальной операции (обычно это та, которая определяет элемент панели запуска или экспортируется иным образом) на тему, созданную на предыдущем шаге.

<activity
    android:name=".snippets.SplashScreenActivity"
    android:exported="true"
    android:taskAffinity=""
    android:theme="@style/Theme.App.Starting">
    <!-- ... -->
</activity>

Обновите начальную активность

Установите заставку в начальном действии, прежде чем вызывать super.onCreate() и загружать composable-функцию:

class SplashScreenActivity : ComponentActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        installSplashScreen()
        super.onCreate(savedInstanceState)

        setContent {
            WearApp()
        }
    }
}

Дополнительные ресурсы

Подробнее о заставках и их использовании в приложениях…