Адаптивные иконки

Адаптивная иконка, или AdaptiveIconDrawable , может отображаться по-разному в зависимости от возможностей конкретного устройства и пользовательской темы оформления. Адаптивные иконки в основном используются в лаунчере на главном экране, но они также могут использоваться в ярлыках, приложении «Настройки», диалоговых окнах обмена данными и на экране обзора. Адаптивные иконки используются на всех форм-факторах Android.

В отличие от растровых изображений , адаптивные значки могут адаптироваться к различным сценариям использования:

  • Различные формы: адаптивный значок может отображать различные формы на разных моделях устройств. Например, на одном устройстве от производителя он может отображаться в виде круга, а на другом — в виде скругленного квадрата (форма, находящаяся между квадратом и кругом). Каждый производитель устройств должен предоставить маску, которую система использует для отображения всех адаптивных значков с одинаковой формой.

    GIF-анимация, демонстрирующая повторяющийся рисунок одной и той же иконки Android, показывающая различные формы в зависимости от используемой маски — круг, а затем два разных вида скругленных квадратов.
    Рисунок 1. Адаптивные значки поддерживают различные маски, которые различаются в зависимости от устройства.
  • Визуальные эффекты: адаптивная иконка поддерживает множество привлекательных визуальных эффектов, которые отображаются, когда пользователи размещают или перемещают иконку по главному экрану.

    GIF-анимация, демонстрирующая примеры двух круглых иконок Android, анимированных для отображения реакции пользователя. Первая иконка показывает логотип Android, колеблющийся влево, затем вправо, затем вверх и вниз внутри круга. Вторая иконка расширяется, а затем снова сжимается.
    Рисунок 2. Примеры визуальных эффектов, отображаемых адаптивной иконкой.
  • Настройка тем оформления пользователем: начиная с Android 13 (уровень API 33), пользователи могут настраивать темы оформления своих адаптивных значков. Если пользователь включает настройку тем оформления значков приложений в системных настройках, и лаунчер поддерживает эту функцию, система использует цветовую гамму выбранных пользователем обоев и темы для определения оттенка значков приложений, имеющих monochrome слой в своих адаптивных значках. Начиная с Android 16 QPR 2, Android автоматически настраивает темы оформления значков приложений, которые не предоставляют свои собственные.

    Пример трех устройств Android, на каждом из которых отображается различная пользовательская тема с разными оттенками: на первом показаны обои с темным оттенком; на втором — обои с золотистым оттенком; на третьем — обои со светло-серым и голубоватым оттенком. В каждом примере значки унаследовали оттенок обоев и идеально вписываются в общую картину.
    Рисунок 3. Адаптивные значки, наследующие настройки обоев и тем пользователя.

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

    • Если пользователь не включил тематические значки приложений.
    • Если ваше приложение не предоставляет монохромную иконку, а устройство пользователя работает на более ранней версии Android, чем Android 16 QPR 2.
    • Если лаунчер не поддерживает тематические значки приложений.

Адаптивные иконки для дизайна

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

  • Для цветной версии иконки необходимо предоставить два слоя: один для переднего плана и один для фона. Слои могут быть как векторными, так и растровыми, хотя предпочтительнее использовать векторные.

    Пример переднего слоя (слева) и фонового слоя (справа). На переднем плане отображается 16-гранная иконка образца логотипа Android, расположенная по центру в безопасной зоне 66x66. Безопасная зона расположена по центру внутри контейнера 108x108. На заднем плане отображаются те же измеренные размеры безопасной зоны и контейнера, но только синий фон и нет логотипа.
    Рисунок 4. Адаптивные значки, определенные с использованием слоев переднего и заднего плана. Изображенная безопасная зона размером 66x66 — это область, которая никогда не обрезается маской заданной формы, определенной производителем оборудования.
    Пример, демонстрирующий иконку с предыдущего рисунка, наложенную на круглую маску.
    Рисунок 5. Пример того, как передний и задний планы выглядят вместе с применением круглой маски.
  • Если вы хотите поддерживать пользовательскую настройку тем оформления значков приложений, предоставьте один слой для монохромной версии значка.

    Пример монохромного слоя с иконкой (слева) и предварительный просмотр цветов (справа). Монохромный слой отображает 16-гранную икону образца логотипа Android, расположенную по центру в безопасной зоне 66x66. Безопасная зона расположена по центру внутри контейнера 108x108. Предварительный просмотр цветов показывает, как этот слой отображается при применении к пользовательским темам разных цветов (оранжевый, розовый, желтый и зеленый).
    Рисунок 6. Монохромный слой иконок (слева) с примерами предварительного просмотра цветов (справа).
  • Размер всех слоев — 108x108 пикселей.

  • Используйте значки с четкими краями. Слои не должны иметь масок или фоновых теней вокруг контура значка.

  • Используйте логотип размером не менее 48x48 пикселей. Его размер не должен превышать 66x66 пикселей, поскольку внутренние 66x66 пикселей значка находятся внутри замаскированного области просмотра.

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

Чтобы узнать, как создавать адаптивные значки с помощью Android Studio, ознакомьтесь с шаблоном значка приложения Android в Figma или документацией Android Studio по созданию значков для запуска приложений . Также прочитайте статью в блоге «Разработка адаптивных значков» .

Добавьте адаптивную иконку в свое приложение.

Адаптивные значки, как и неадаптивные, указываются с помощью атрибута android:icon в манифесте приложения .

Необязательный атрибут android:roundIcon используется лаунчерами, представляющими приложения с круглыми значками, и может быть полезен, если значок вашего приложения включает круглый фон в качестве основной части своего дизайна. Такие лаунчеры обязаны генерировать значки приложений, применяя круглую маску к android:roundIcon , и эта гарантия может позволить вам оптимизировать внешний вид значка вашего приложения, например, немного увеличив логотип и обеспечив, чтобы при обрезке круглый фон занимал всю площадь.

Приведённый ниже фрагмент кода иллюстрирует оба этих атрибута, но большинство приложений указывают только android:icon :

<application
    ...
    android:icon="@mipmap/ic_launcher"
    android:roundIcon="@mipmap/ic_launcher_round"
    ...>
</application>

Далее сохраните адаптивную иконку в файл res/mipmap-anydpi-v26/ic_launcher.xml . Используйте элемент <adaptive-icon> для определения ресурсов переднего плана, фона и монохромного слоя для ваших иконок. Внутренние элементы <foreground> , <background> и <monochrome> поддерживают как векторные, так и растровые изображения.

В следующем примере показано, как определить элементы <foreground> , <background> и <monochrome> внутри <adaptive-icon> :

<?xml version="1.0" encoding="utf-8"?>
...
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
    <background android:drawable="@drawable/ic_launcher_background" />
    <foreground android:drawable="@drawable/ic_launcher_foreground" />
    <monochrome android:drawable="@drawable/ic_launcher_foreground" />
</adaptive-icon>
...

Для переднего и монохромного слоев используется один и тот же ресурс изображения. Однако при необходимости можно создать отдельные ресурсы изображения для каждого слоя.

Вы также можете определять графические объекты как элементы, встраивая их в элементы <foreground> , <background> и <monochrome> . В следующем фрагменте кода показан пример того, как это сделать с графическим объектом foreground.

<?xml version="1.0" encoding="utf-8"?>
...
<foreground>
   <inset
       android:insetBottom="18dp"
       android:insetLeft="18dp"
       android:insetRight="18dp"
       android:insetTop="18dp">
       <shape android:shape="oval">
           <solid android:color="#0000FF" />
       </shape>
   </inset>
</foreground>
...

Если вы хотите применить к своим ярлыкам ту же маску и визуальный эффект, что и к обычным адаптивным значкам, используйте один из следующих способов:

  • Для статических ярлыков используйте элемент <adaptive-icon> .
  • Для создания динамических сочетаний клавиш вызовите метод createWithAdaptiveBitmap() при их создании.

Для получения дополнительной информации о реализации адаптивных значков см. раздел «Реализация адаптивных значков ». Для получения дополнительной информации о сочетаниях клавиш см. раздел «Обзор сочетаний клавиш приложений» .

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

Для получения дополнительной информации о разработке и внедрении адаптивных иконок см. следующие ресурсы.