Ориентация приложения, соотношение сторон и возможность изменения размера

Приложения Android работают на устройствах всех типов: телефонах, планшетах, складных устройствах, устройствах ChromeOS, автомобилях, телевизорах и даже XR. Чтобы адаптироваться к этой разнообразной среде, ваше приложение должно поддерживать все форм-факторы устройств и размеры экранов.

Android 16 (API уровня 36) позволяет приложениям адаптироваться к различным форм-факторам и размерам дисплеев, переопределяя ограничения приложений на ориентацию экрана, соотношение сторон и возможность изменения размера. Эти переопределения применяются к устройствам с минимальной шириной >= 600 dp, что определяет следующее:

  • Таблетки
  • Внутренние дисплеи складных устройств с большим экраном
  • Оконный режим рабочего стола (для всех форм-факторов)

Приложения, ориентированные на API уровня 36, поддерживают изменение размера и могут переходить в многооконный режим (эквивалент resizeableActivity="true" ), если наименьшая ширина дисплея >= 600dp.

Приложение отображается в формате Letterbox на развернутом большом экране устройства до Android 16, но отображается в полноэкранном режиме при переходе на Android 16. Приложение отображает больше новостей в полноэкранном режиме, чем в формате Letterbox.
Рисунок 1. Лента новостей для разработчиков, которая ранее отображалась в виде почтового ящика на устройствах с большим экраном (слева), отображается на весь экран при использовании Android 16 (справа).

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

Изменения

Следующие атрибуты манифеста и API игнорируются для приложений, ориентированных на Android 16 (уровень API 36) на больших экранах:

Атрибут или API Игнорируемые значения
screenOrientation portrait , landscape , reversePortrait , reverseLandscape , sensorPortrait , sensorLandscape , userPortrait , userLandscape
resizeableActivity все
minAspectRatio все
maxAspectRatio все
setRequestedOrientation()

getRequestedOrientation()
portrait , landscape , reversePortrait , reverseLandscape , sensorPortrait , sensorLandscape , userPortrait , userLandscape

Исключения

Исключения из изменений Android 16 включают следующее:

  • Дисплеи меньше, чем sw600dp (большинство телефонов, раскладных устройств и внешние дисплеи складных устройств с большим экраном)

  • Игры, основанные на флаге android:appCategory

    Опубликуйте свою игру с помощью Android App Bundles и Play App Signing, что позволит Google Play управлять флагом и автоматически предоставлять преимущества App Bundles. См. также раздел Обзор манифеста приложения .

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

Уклоняться

Чтобы отказаться от поведения API уровня 36, объявите свойство манифеста PROPERTY_COMPAT_ALLOW_RESTRICTED_RESIZABILITY .

Чтобы отказаться от определенного действия, задайте свойство в элементе <activity> :

<activity ...>
    <property
        android:name="android.window.PROPERTY_COMPAT_ALLOW_RESTRICTED_RESIZABILITY"
        android:value="true" />
    ...
</activity>

Чтобы отказаться от всего приложения, задайте свойство в элементе <application> :

<application ...>
    <property
        android:name="android.window.PROPERTY_COMPAT_ALLOW_RESTRICTED_RESIZABILITY"
        android:value="true" />
    ...
</application>

Тесты

Чтобы проверить, повлияют ли изменения Android 16 на ваше приложение, используйте эмуляторы серий Pixel Tablet и Pixel Fold в Android Studio и установите targetSdkPreview = "Baklava" в файле build.gradle модуля вашего приложения.

Или используйте фреймворк совместимости приложений на тестовых устройствах, включив флаг UNIVERSAL_RESIZABLE_BY_DEFAULT (см. Инструменты фреймворка совместимости ).

Вы можете автоматизировать тестирование с помощью фреймворка тестирования Espresso и API тестирования Jetpack Compose .

Распространенные проблемы

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

Чтобы обеспечить оптимальный пользовательский опыт на телефонах, складных устройствах, планшетах, устройствах ChromeOS, автомобильных дисплеях и XR, сделайте свое приложение отзывчивым и адаптивным:

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

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

  • Обеспечьте совместимость камеры с портретной и альбомной ориентацией: Предварительный просмотр видоискателя камеры, предполагающий определённое соотношение сторон и ориентацию относительно сенсора камеры, может привести к растянутым или перевёрнутым изображениям на дисплеях, не соответствующих стандартам. Убедитесь, что видоискатели правильно поворачиваются при изменении ориентации. Разрешите видоискателям подстраиваться под соотношения сторон пользовательского интерфейса, отличающиеся от соотношения сторон сенсора.

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

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

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

Хронология

  • Android 16 (2025): Поддержка всех ориентаций и соотношений сторон, а также возможности изменения размера приложений является базовым требованием для устройств с большим экраном (минимальная ширина экрана >= 600 dp) для приложений, ориентированных на API уровня 36. Однако разработчики могут отказаться от этой поддержки.

  • Релиз Android в 2026 году: поддержка всех ориентаций и соотношений сторон, а также изменение размера приложения станет базовым функционалом для устройств с большим экраном (минимальная ширина экрана >= 600 dp) для приложений, ориентированных на API уровня 37. Разработчики не смогут отказаться от этой поддержки.

Целевой уровень API Применимые устройства Разрешен отказ разработчика
36 (Андроид 16) Устройства с большим экраном (минимальная ширина экрана >= 600dp) Да
37 (ожидается) Устройства с большим экраном (минимальная ширина экрана >= 600dp) Нет

Сроки достижения определённых уровней API определяются магазином приложений. Google Play потребует от приложений достижения уровня API 36 с августа 2026 года и уровня API 37 с августа 2027 года.

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