Адаптивные приложения поддерживают отображение всех размеров: весь экран устройства, окна с изменяемым размером в многооконном режиме, книжную и альбомную ориентацию, сложенное и развернутое отображение складных устройств.
Краткий список параметров конфигурации и API позволяет создавать адаптивные приложения. Однако некоторые устаревшие настройки и API несовместимы с адаптивными приложениями, и их следует избегать.
Возможность изменения размера
Адаптивные приложения поддерживают возможность изменения размера приложения и многооконный режим.
Атрибут resizeableActivity
элементов манифеста <activity>
и <application>
включает или отключает многооконный режим в Android 11 (уровень API 30) и более ранних версиях. В Android 12 (уровень API 31) и выше большие экраны поддерживают многооконный режим независимо от атрибута. Дополнительную информацию см. в разделе Поддержка многооконного режима .
Предоставьте своему приложению возможность участвовать в многооконных и многозадачных сценариях, чтобы повысить производительность и удовлетворенность пользователей.
Установите resizeableActivity="true"
, если ваше приложение нацелено на уровни API ниже 24; в противном случае забудьте об этом — это true
по умолчанию в Android 7.0 (уровень API 24) и выше.
Не устанавливайте resizeableActivity="false"
для любого уровня API. Не исключайте свое приложение из вариантов использования, включающих многооконный режим.
Ориентация
Адаптивные приложения поддерживают книжную и альбомную ориентацию независимо от размера экрана или оконного режима.
Параметр манифеста screenOrientation
ограничивает ориентацию активности.
Удалите параметр screenOrientation
из манифеста приложения.
Блокировка ориентации приложений не предотвращает изменение размера окна. Размер приложений изменяется, когда они переходят в многооконный режим, когда устройство складывается или разворачивается, а также когда изменяется размер окна типа рабочего стола. Ваше приложение должно поддерживать изменения размера окна независимо от настройки атрибута screenOrientation
.
Не ограничивайте деятельностную направленность. Приложения, которые блокируют ориентацию, размещаются в почтовом ящике на устройствах с большим экраном и несовместимыми размерами окон.
Приложения в почтовом ящике могут быть менее заметны в Google Play для планшетов, складных устройств и устройств ChromeOS.
Соотношение сторон
Поскольку размеры экрана и окон различаются, меняются и их соотношения сторон — от высокого и узкого до квадратного, короткого и широкого.
Параметры манифеста minAspectRatio
и maxAspectRatio
ограничивают соотношение сторон вашего приложения жестко запрограммированными значениями.
Адаптируйте свое приложение к дисплею независимо от его относительных размеров.
Удалите параметры minAspectRatio
и maxAspectRatio
из манифеста приложения. Или убедитесь, что размер вашего приложения можно изменить, а соотношение сторон позаботится само собой (см. раздел «Изменение размера» ).
Не пытайтесь контролировать относительные размеры вашего приложения. Если ваше приложение запускается на экране или в окне, соотношение сторон которого несовместимо с соотношением сторон приложения, ваше приложение является почтовым ящиком.
В Android 14 (уровень API 34) и более поздних версиях пользователи могут переопределить соотношение сторон приложения, чтобы расширить приложения в почтовом ящике и заполнить доступную область отображения. См. Режим совместимости устройств .
Размер окна
Оптимизация макетов для дисплеев разных размеров — центральная предпосылка адаптивного дизайна. Адаптивные приложения ориентированы на размер окна приложения, а не на размер экрана устройства. Когда приложение работает в полноэкранном режиме, окном приложения является экран устройства.
Классы размеров окон предоставляют систематический способ определения и классификации размера окна приложения. Адаптируйте свое приложение, меняя макеты по мере изменения класса размера окна вашего приложения.
Оцените размер окна вашего приложения на основе классов размеров окон.
Чтобы определить класс размера окна, используйте функцию верхнего уровня currentWindowAdaptiveInfo()
адаптивной библиотеки Compose Material 3. Дополнительные сведения см. в разделе Создание адаптивных приложений .
Не пренебрегайте полезностью определений классов размеров окон и встроенных 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 для навигации по вкладкам клавиатуры, а также щелчков мыши или трекпада, выбора и прокрутки. Опубликуйте сочетания клавиш вашего приложения в Помощнике по сочетаниям клавиш .
Используйте библиотеку Jetpack Material 3, чтобы пользователи могли писать в любой компонент TextField
с помощью стилуса.
Не делайте альтернативные методы ввода невозможными. Не рассказывайте о проблемах доступности.
Краткое содержание
- Создайте свое приложение с помощью Compose и адаптивной библиотеки Material 3.
- Базовые макеты по классам размеров окон
- Создание многопанельных макетов
- Сделайте свое приложение изменяемым по размеру
- Никогда не блокируйте ориентацию активности
- Не ограничивайте соотношение сторон
- Поддержка ввода, кроме сенсорного
- Избегайте устаревших API
✓ Делайте то, что ожидают ваши пользователи: оптимизируйте свое приложение для разнообразия устройств, которыми люди пользуются каждый день.
✗ Не ждите. Начните сегодня!