Адаптивные приложения поддерживают дисплеи всех размеров: весь экран устройства, изменяемые размеры окон в многооконном режиме, портретную и альбомную ориентацию, сложенные и развернутые дисплеи складных устройств.
Короткий список настроек конфигурации и 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
✓ Делайте то, чего ожидают ваши пользователи: оптимизируйте свое приложение для разнообразия устройств, которыми люди пользуются каждый день.
✗ Не ждите. Начните сегодня!