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

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

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

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

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

Приложение отображается в полноэкранном режиме на устройствах с большим экраном, выпущенных до Android 16, но становится полноэкранным при запуске на Android 16. В полноэкранном режиме приложение отображает больше новостных статей, чем в режиме с черными полосами сверху и снизу.
Рисунок 1. Лента новостей для разработчиков, ранее отображавшаяся в формате Letterbox на устройствах с большими экранами (слева), теперь воспроизводится в полноэкранном режиме при использовании с 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 управлять флагом и автоматически предоставлять преимущества пакетов приложений. См. также Обзор манифеста приложения .

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

Уклоняться

Чтобы отказаться от поведения 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 и других устройствах, создавайте адаптивные и отзывчивые приложения.

Контрольный список готовности

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

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

Практическое руководство по созданию адаптивных макетов в Compose см. в практическом руководстве « Создание адаптивных приложений с помощью Jetpack Compose» . Если вы переносите приложение, использующее представления, см. в разделе «Стратегия внедрения Compose» .

Хронология

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

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

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