Предоставьте пользователям возможность персонализировать цветовое восприятие в вашем приложении.

Попробуйте способ Compose
Jetpack Compose — рекомендуемый набор инструментов пользовательского интерфейса для Android. Узнайте, как работать с динамическим цветом в Compose.

Функция Dynamic Color, добавленная в Android 12, позволяет пользователям персонализировать свои устройства, выровняв их по тону с цветовой схемой личных обоев или с помощью выбранного цвета в палитре обоев.

Вы можете использовать эту функцию, добавив API DynamicColors , который применяет эту тему к вашему приложению или действию, чтобы сделать ваше приложение более персонализированным для пользователя.

Рисунок 1. Примеры тональных цветовых схем, полученных из разных обоев.

На этой странице вы найдете инструкции по внедрению динамических цветов в ваше приложение. Эта функция также доступна отдельно для виджетов и адаптивных иконок , как описано далее на этой странице. Вы также можете попробовать codelab .

Как Android создает цветовые схемы

Для генерации цветовых схем из обоев пользователя Android выполняет следующие шаги.

  1. Система определяет основные цвета в выбранном изображении обоев и извлекает исходный цвет.

  2. Система использует этот исходный цвет для дальнейшей экстраполяции пяти ключевых цветов, известных как первичный , вторичный , третичный , нейтральный и нейтральный вариант .

    Пример извлечения исходного цвета
    Рисунок 2. Пример извлечения исходного цвета из изображения обоев и извлечения его в пять ключевых цветов
  3. Система интерпретирует каждый ключевой цвет в тональную палитру из 13 тонов.

    Пример создания заданной тональной палитры
    Рисунок 3. Пример создания заданной тональной палитры
  4. Система использует эти обои для создания пяти различных цветовых схем, которые служат основой для любых светлых и темных тем.

Как отображаются варианты цвета на устройстве пользователя

Пользователи могут выбирать цветовые варианты из цветов, извлеченных из обоев, и различных тем, начиная с Android 12, а в Android 13 добавлено больше вариантов. Например, пользователь телефона Pixel под управлением Android 13 может выбрать вариант из настроек обоев и стилей , как показано на рисунке 4.

Рисунок 4. Выбор цветовых вариантов в настройках обоев (показано на устройстве Pixel)

В Android 12 добавлен вариант Tonal Spot , за которым в Android 13 последовали варианты Neutral , Vibrant Tonal и Expressive . Каждый вариант имеет уникальный рецепт, который преобразует исходные цвета обоев пользователя посредством яркости и вращения оттенка. В следующем примере показана одна цветовая схема, выраженная через эти четыре цветовых варианта.

Рисунок 5. Пример того, как выглядят разные цветовые варианты на одном устройстве

Ваше приложение по-прежнему использует те же токены для доступа к этим цветам. Подробнее о токенах см. в разделе Создание темы с токенами на этой странице.

Начните просмотры

Вы можете применить Dynamic Color на уровне приложения или активности. Для этого вызовите applyToActivitiesIfAvailable() , чтобы зарегистрировать ActivityLifeCycleCallbacks в вашем приложении.

Котлин

class MyApplication: Application() {
    override fun onCreate() {
        DynamicColors.applyToActivitiesIfAvailable(this)
    }
}

Ява

public class MyApplication extends Application {
  @Override
  public void onCreate() {
    super.onCreate();
    DynamicColors.applyToActivitiesIfAvailable(this);
  }
}

Затем добавьте тему в свое приложение.

<style
    name="AppTheme"
    parent="ThemeOverlay.Material3.DynamicColors.DayNight">
    ...
</style>

Создайте свою тему с токенами

Dynamic Color использует преимущества токенов дизайна, чтобы сделать назначение цветов различным элементам пользовательского интерфейса более рациональным и последовательным. Токен дизайна позволяет вам семантически назначать роли цвета, а не заданное значение, различным элементам пользовательского интерфейса. Это позволяет тональной системе вашего приложения иметь большую гибкость, масштабируемость и последовательность и особенно эффективно при проектировании для светлых и темных тем и динамического цвета.

В следующих фрагментах показаны примеры светлой и темной тем, а также соответствующий цветовой XML-файл после применения динамических цветовых токенов.

Светлая тема

Themes.xml

<resources>
  <style name="AppTheme" parent="Theme.Material3.Light.NoActionBar">
    <item name="colorPrimary">@color/md_theme_light_primary</item>
    <item name="colorOnPrimary">@color/md_theme_light_onPrimary</item>
    <item name="colorPrimaryContainer">@color/md_theme_light_primaryContainer</item>
    <item name="colorOnPrimaryContainer">@color/md_theme_light_onPrimaryContainer</item>
    <item name="colorError">@color/md_theme_light_error</item>
    <item name="colorOnError">@color/md_theme_light_onError</item>
    <item name="colorErrorContainer">@color/md_theme_light_errorContainer</item>
    <item name="colorOnErrorContainer">@color/md_theme_light_onErrorContainer</item>
    <item name="colorOnBackground">@color/md_theme_light_onBackground</item>
    <item name="colorSurface">@color/md_theme_light_surface</item>
    <item name="colorOnSurface">@color/md_theme_light_onSurface</item>
    …..
  </style>
</resources>

Темная тема

Themes.xml

<resources>
  <style name="AppTheme" parent="Theme.Material3.Dark.NoActionBar">
    <item name="colorPrimary">@color/md_theme_dark_primary</item>
    <item name="colorOnPrimary">@color/md_theme_dark_onPrimary</item>
    <item name="colorPrimaryContainer">@color/md_theme_dark_primaryContainer</item>
    <item name="colorOnPrimaryContainer">@color/md_theme_dark_onPrimaryContainer</item>
    <item name="colorError">@color/md_theme_dark_error</item>
    <item name="colorOnError">@color/md_theme_dark_onError</item>
    <item name="colorErrorContainer">@color/md_theme_dark_errorContainer</item>
    <item name="colorOnErrorContainer">@color/md_theme_dark_onErrorContainer</item>
    <item name="colorOnBackground">@color/md_theme_dark_onBackground</item>
    <item name="colorSurface">@color/md_theme_dark_surface</item>
    <item name="colorOnSurface">@color/md_theme_dark_onSurface</item>
    ……
  </style>
</resources>

Цвета xml

Colors.xml

<resources>
  <color name="md_theme_light_primary">#6750A4</color>
  <color name="md_theme_light_onPrimary">#FFFFFF</color>
  <color name="md_theme_light_primaryContainer">#EADDFF</color>
  <color name="md_theme_light_onPrimaryContainer">#21005D</color>
  <color name="md_theme_light_error">#B3261E</color>
  <color name="md_theme_light_onError">#FFFFFF</color>
  <color name="md_theme_light_errorContainer">#F9DEDC</color>
  <color name="md_theme_light_onErrorContainer">#410E0B</color>
  <color name="md_theme_light_surface">#FFFBFE</color>
  <color name="md_theme_light_onSurface">#1C1B1F</color>
  <color name="md_theme_light_surfaceVariant">#E7E0EC</color>
  <color name="md_theme_dark_primary">#D0BCFF</color>
  <color name="md_theme_dark_onPrimary">#381E72</color>
  <color name="md_theme_dark_primaryContainer">#4F378B</color>
  <color name="md_theme_dark_onPrimaryContainer">#EADDFF</color>
  <color name="md_theme_dark_secondary">#CCC2DC</color>
  <color name="md_theme_dark_onSecondary">#332D41</color>
  <color name="md_theme_dark_secondaryContainer">#4A4458</color>
  <color name="md_theme_dark_onSurface">#E6E1E5</color>
  <color name="md_theme_dark_surfaceVariant">#49454F</color>
</resources>

Для получения дополнительной информации:

  • Чтобы узнать больше о динамическом цвете, пользовательских цветах и ​​создании токенов, посетите страницу Material 3 Dynamic Color .

  • Чтобы создать базовую цветовую палитру, а также цвета и тему вашего приложения, воспользуйтесь Material Theme Builder, доступным через плагин Figma или в браузере .

  • Чтобы узнать больше о том, как использование цветовых схем может улучшить доступность вашего приложения, см. страницу Material 3 о доступности цветовой системы .

Сохраните индивидуальные или фирменные цвета

Если в вашем приложении есть пользовательские или фирменные цвета, которые вы не хотите менять в соответствии с предпочтениями пользователя, вы можете добавлять их по отдельности при создании цветовой схемы. Например:

Themes.xml

<resources>
    <style name="AppTheme" parent="Theme.Material3.Light.NoActionBar">
        ...
        <item name="home_lamp">@color/home_yellow</item>
          ...
    </style>
</resources>
Colors.xml
<resources>
   <color name="home_yellow">#E8D655</color>
</resources>

В качестве альтернативы вы можете использовать Material Theme Builder для импорта дополнительных цветов, которые расширяют вашу цветовую схему, тем самым создавая единую цветовую систему. С помощью этой опции используйте HarmonizedColors для изменения тона пользовательских цветов. Это позволяет достичь визуального баланса и доступного контраста при сочетании с пользовательскими цветами. Это происходит во время выполнения с applyToContextIfAvailable() .

Рисунок 6. Пример гармонизации пользовательских цветов

См. руководство Material 3 по гармонизации пользовательских цветов .

Применяйте динамический цвет к своим адаптивным значкам и виджетам

Помимо включения темы Dynamic Color в вашем приложении, вы также можете поддерживать тему Dynamic Color для виджетов , начиная с Android 12, и для адаптивных значков, начиная с Android 13.