Адаптивные правила и запреты

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

Короткий список настроек конфигурации и API позволяет вам создавать адаптивные приложения. Но некоторые устаревшие настройки и API несовместимы с адаптивными приложениями и их следует избегать.

Возможность изменения размера

Адаптивные приложения поддерживают изменение размера приложения и многооконный режим.

Атрибут resizeableActivity элементов манифеста <activity> и <application> включает или отключает многооконный режим на Android 11 (уровень API 30) и ниже. На Android 12 (уровень API 31) и выше большие экраны поддерживают многооконный режим независимо от атрибута. Для получения дополнительной информации см. Поддержка многооконного режима .

✓ Делать

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

Установите resizeableActivity="true" , если ваше приложение ориентировано на уровни API ниже 24; в противном случае забудьте об этом — на Android 7.0 (уровень API 24) и выше это значение true по умолчанию.

✗ Не надо

Не устанавливайте resizeableActivity="false" для любого уровня API. Не исключайте свое приложение из вариантов использования, включающих многооконный режим.

Ориентация

Адаптивные приложения поддерживают портретную и альбомную ориентацию независимо от размера дисплея или режима окна.

Параметр манифеста screenOrientation ограничивает ориентацию активности.

✓ Делать

Удалите настройку screenOrientation из манифеста вашего приложения.

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

✗ Не надо

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

Приложения с леттербоксингом хуже обнаруживаются в Google Play на планшетах, складных устройствах и устройствах ChromeOS.

Соотношение сторон

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

Параметры манифеста minAspectRatio и maxAspectRatio ограничивают соотношение сторон вашего приложения жестко заданными значениями.

✓ Делать

Адаптируйте свое приложение к дисплею независимо от относительных размеров.

Удалите настройки minAspectRatio и maxAspectRatio из манифеста вашего приложения. Или убедитесь, что размер вашего приложения можно изменять, а соотношение сторон само позаботится об этом (см. раздел Изменение размера ).

✗ Не надо

Не пытайтесь контролировать относительные размеры вашего приложения. Если ваше приложение работает на экране или в окне, соотношение сторон которого несовместимо с соотношением сторон приложения, ваше приложение имеет формат letterboxed.

На Android 14 (уровень API 34) и выше пользователи могут переопределить соотношение сторон приложения, чтобы расширить приложения с леттербоксами для заполнения доступной области дисплея. См. Режим совместимости устройств .

Размер окна

Оптимизация макетов для разных размеров дисплеев — центральная предпосылка адаптивного дизайна. Адаптивные приложения фокусируются на размере окна приложения, а не на размере экрана устройства. Когда приложение полноэкранное, окно приложения — это экран устройства.

Классы размера окна предоставляют систематический способ определения и категоризации размера окна приложения. Адаптируйте свое приложение, изменяя макеты по мере изменения класса размера окна вашего приложения.

✓ Делать

Оцените размер окна вашего приложения на основе классов размеров окон.

Чтобы определить класс размера окна, используйте функцию верхнего уровня currentWindowAdaptiveInfo() библиотеки Compose Material 3 Adaptive. Для получения дополнительной информации см. раздел Создание адаптивных приложений .

✗ Не надо

Не пренебрегайте полезностью определений классов размера окна и встроенных API. Не используйте устаревшие API для расчета размера окна.

Устаревшие API

API старых платформ некорректно измеряют окно приложения; некоторые измеряют экран устройства, некоторые исключают системное оформление.

✓ Делать

Используйте WindowManager#getCurrentWindowMetrics() и WindowMetrics#getBounds() для получения размера окна приложения. Используйте WindowMetrics#getDensity() для получения плотности отображения.

✗ Не надо

Не используйте следующие устаревшие API Display для определения размера окна:

  • getSize() : Устарело в Android 11 (API уровня 30)
  • getMetrics() : не рекомендуется в Android 11 (API уровня 30)
  • getRealSize() : Устарело в Android 12 (уровень API 31)
  • getRealMetrics() : устарело в Android 12 (уровень API 31)

Сочинять

Jetpack Compose предназначен для разработки адаптивного пользовательского интерфейса. Никакого XML, никаких файлов макета, никаких квалификаторов ресурсов. Только основанные на Kotlin, не имеющие состояния компоновочные элементы, такие как Column , Row и Box , которые описывают ваш пользовательский интерфейс, и модификаторы, такие как offset , padding и size , которые добавляют поведение к элементам пользовательского интерфейса.

✓ Делать

Создавайте с Compose. Будьте в курсе последних функций и релизов.

✗ Не надо

Не полагайтесь на устаревшие технологии. Не позволяйте вашему приложению устареть.

Адаптивная библиотека Compose Material 3

Библиотека Compose Material 3 Adaptive предоставляет компоненты и API, облегчающие разработку адаптивных приложений.

✓ Делать

Чтобы сделать ваше приложение адаптивным, используйте следующие API:

  • NavigationSuiteScaffold : переключение между панелью навигации и навигационной направляющей в зависимости от класса размера окна приложения.
  • ListDetailPaneScaffold : реализует канонический макет списка-детали. Адаптирует макет к размеру окна приложения.
  • SupportingPaneScaffold : реализует каноническую компоновку поддерживающей панели.
✗ Не надо

Не изобретайте велосипед. Не упускайте возможности повышения производительности труда разработчиков, предоставляемые всеми библиотеками Jetpack Compose.

Макеты

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

Адаптивные приложения оптимизируют макеты в зависимости от изменений на дисплее, в частности, от изменений размера окна приложения или положения устройства.

✓ Делать

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

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

✓ Выполнить: Перечислить и подробно описать действия, организованные в двухпанельном макете.
✗ Не надо

Если вы не используете панели содержимого, не растягивайте элементы пользовательского интерфейса, чтобы заполнить доступное пространство дисплея. Длинные строки текста трудно читать. Растянутые кнопки выглядят плохо спроектированными. Если вы используете Modifier.fillMaxWidth , не думайте, что это правильное поведение для всех размеров дисплея.

✗ Не следует: Растягивать макет, чтобы заполнить расширяющееся окно.

Устройства ввода

Пользователи не просто используют сенсорные экраны для взаимодействия с приложениями.

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

✓ Делать

Воспользуйтесь встроенной функциональностью платформы Android для навигации по вкладкам клавиатуры и щелчков мыши или трекпада, выбора и прокрутки. Опубликуйте сочетания клавиш вашего приложения в Keyboard Shortcuts Helper .

Используйте библиотеку Jetpack Material 3, чтобы пользователи могли писать в любом компоненте TextField с помощью стилуса.

✗ Не надо

Не делайте альтернативные методы ввода невозможными. Не создавайте проблем с доступностью.

Краткое содержание

  • Создайте свое приложение с помощью Compose и библиотеки Material 3 Adaptive
  • Базовые макеты на классах размеров окон
  • Создание многопанельных макетов
  • Сделайте так, чтобы размер вашего приложения можно было изменять
  • Никогда не блокируйте ориентацию деятельности
  • Не ограничивайте соотношение сторон
  • Поддержка ввода, отличного от сенсорного
  • Избегайте устаревших API

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

✗ Не ждите. Начните сегодня!