Поддержка многооконного режима

На устройствах с Android 7.0 и более поздними версиями ОС можно одновременно запускать несколько приложений в многооконном режиме. В Android поддерживаются три конфигурации многооконного режима:

  • Свободная форма. Позволяет пользователям динамически изменять размер панелей действий и видеть на экране более двух приложений. Многооконный режим позволяет создавать на рабочем столе окна произвольной формы и взаимодействовать с ними так же, как на компьютере.
  • Разделенный экран. Реализация многооконного режима по умолчанию, которая предоставляет два окна, в которых пользователи могут размещать приложения.
  • Режим "Картинка в картинке" (PIP). Позволяет воспроизводить видеоконтент в небольшом окне на устройствах Android, пока пользователь работает с другими приложениями.

Требования к устройствам с многооконным режимом

В Android 7.0 и более поздних версиях многооконный режим включен по умолчанию. Чтобы отключить его, задайте для флага config_supportsMultiWindow значение false в файле config.xml на устройстве.

Многооконный режим по умолчанию отключен на всех устройствах с небольшим объемом ОЗУ (устройствах, для которых объявлено свойство ActivityManager.isLowRam). На таких устройствах значение флага config_supportsMultiWindow игнорируется.

Вручную

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

  • Включите флаг config_supportsMultiWindow.
  • Включите управление окнами произвольной формы одним из следующих способов:
    • Включите параметр config_freeformWindowManagement в config.xml:
      <feature name="android.software.freeform_window_management" />
    • Добавьте в файл makefile устройства следующие строки:
      PRODUCT_COPY_FILES += \
      frameworks/native/data/etc/android.software.freeform_window_management.xml:$(TARGET_COPY_OUT_SYSTEM)/etc/permissions/android.software.freeform_window_management.xml

В Android 16 производители устройств могут включить поддержку многооконного режима с окнами произвольной формы с помощью параметра Включить многооконный режим.

Многооконный режим

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

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

Чтобы настроить устройство для работы с окнами на рабочем столе, выполните следующие требования:

  • Включите следующие флаги:
  • Для системного интерфейса требуется экран шириной не менее 600 dp. Многооконный режим на компьютере может работать некорректно на небольших экранах.
  • Устройство не должно иметь мало ОЗУ. ActivityManager.isLowRam должен возвращать значение false, поскольку устройства с небольшим объемом ОЗУ не поддерживают многооконный режим.

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

Режим Портативное устройство с полноэкранным режимом Портативное устройство, на котором по умолчанию используется полноэкранный режим, подключено к дисплею Полноэкранный режим на большом экране, расширенном на подключенный дисплей Большой экран с многооконным режимом
Пример типа устройства Телефон в руке Портативный телефон с поддержкой HDMI для подключения к внешнему дисплею Планшет с поддержкой HDMI для подключения внешнего дисплея. Планшет с клавиатурой, поддерживающий подключение внешнего дисплея через HDMI
Внутренний дисплей Поддерживаются полноэкранный режим, режим разделенного экрана, режим "Картинка в картинке" и режим свободного перемещения окон (не на компьютере). Поддерживаются полноэкранный режим, режим разделения экрана и режим "Картинка в картинке" Полноэкранный режим, разделение экрана, картинка в картинке, поддержка многооконного режима на отдельных рабочих столах Многооконный режим используется по умолчанию (поддерживаются отдельные рабочие столы). Пользователи могут перейти в полноэкранный или сенсорный многооконный режим через отдельные рабочие столы.
Подключенные дисплеи Как настроить зеркальное отображение только на встроенном дисплее Многооконный режим только на подключенных дисплеях Многооконный режим расширяет рабочие столы и доступен на внутренних экранах Многооконный режим расширяет рабочие столы и доступен на внутренних экранах
Настройки конфигурации
config_supportsMultiWindow true true true true
config_freeformWindowManagement true true true true
config_isDesktopModeSupported false true true true
config_canInternalDisplayHostDesktops Игнорируется false true true
config_enterDesktopByDefaultOnFreeformDisplay Игнорируется false false true

config_isDesktopModeSupported

Флаг наложения конфигурации config_isDesktopModeSupported – это флаг верхнего уровня для включения многооконного режима. Если он не включен, все остальные настройки конфигурации игнорируются. Установите значение true в config.xml:

<!-- Globally enable Desktop windowing logic -->
    <bool name="config_isDesktopModeSupported">true</bool>

Если для config_isDesktopModeSupported задано значение true, система автоматически рассматривает подходящие внешние дисплеи (например, подключенные через DisplayPort или HDMI) как кандидаты для многооконного режима. Дисплей должен соответствовать требованиям Window Manager (быть как минимум общедоступным и доверенным, см. Многооконный режим на компьютере). Система по умолчанию пытается запускать задачи в режиме окон произвольной формы на этих экранах.

config_canInternalDisplayHostDesktops

Флаг наложения конфигурации config_canInternalDisplayHostDesktops включает многооконный режим на внутреннем экране устройства. Установите значение true в файле config.xml:

<!-- Allow the primary internal display to host desktop sessions -->
    <bool name="config_canInternalDisplayHostDesktops">true</bool>

Многооконный режим лучше всего работает на устройствах с большим экраном, например на планшетах, а не на небольших телефонах. Если многооконный режим не включен, он будет поддерживаться только на внешнем дисплее (при условии, что устройство поддерживает HDMI).

config_enterDesktopByDefaultOnFreeformDisplay

Флаг наложения конфигурации config_enterDesktopByDefaultOnFreeformDisplay задает многооконный режим в качестве режима по умолчанию на внутреннем дисплее устройства. Если он не включен, по умолчанию используется полноэкранный режим, в котором рабочие столы существуют одновременно. Установите значение true в config.xml:

<!-- Enable Desktop windowing as the default windowing mode on the internal display -->
    <bool name="config_enterDesktopByDefaultOnFreeformDisplay">true</bool>

Как включить лимиты на задачи

Чтобы настроить максимальное количество задач, поддерживаемых в многооконном режиме, установите для флага оверлея конфигурации config_maxDesktopWindowingActiveTasks в config.xml максимальное количество поддерживаемых задач. Чтобы поддерживать неограниченное количество задач, задайте для флага значение 0:

<!-- Maximum number of tasks supported in desktop windowing -->
      <integer name="config_maxDesktopWindowingActiveTasks">4</integer>

Как включить ограничения для столов

Чтобы настроить максимальное количество виртуальных рабочих столов, поддерживаемых в многооконном режиме, задайте для флага наложения конфигурации config_maxDesktopWindowingDesks в config.xml максимальное количество поддерживаемых рабочих столов. Чтобы разрешить неограниченное количество рабочих столов, задайте для параметра значение 0:

<!-- Maximum number of virtual desks supported in desktop windowing -->
      <integer name="config_maxDesktopWindowingDesks">4</integer>

Разделение экрана

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

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

В Android 8.0 и более поздних версиях разделение экрана улучшено за счет сжатия панели запуска при нажатии кнопки Главный экран. Подробнее о взаимодействии с разделенным экраном…

Картинка в картинке

После включения многооконного режима с помощью флага config_supportsMultiWindow производители устройств могут добавить поддержку режима "Картинка в картинке", который позволяет пользователям смотреть видео, одновременно выполняя другие действия. Хотя эта функция предназначена для устройств Android TV, она может поддерживаться и на других устройствах.

Чтобы поддерживать режим "Картинка в картинке", включите системную функцию PackageManager#FEATURE_PICTURE_IN_PICTURE в /android/frameworks/base/core/java/android/content/pm/PackageManager.java.

Подробнее о реализации режима "Картинка в картинке" на устройствах с Android 8.0 и более поздних версий рассказывается в документации для разработчиков.

Интерфейс системы

Поддерживать все стандартные системные интерфейсы в соответствии с проверкой многооконного режима.

Приложения

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

Проверка

Чтобы проверить реализацию многооконного режима, запустите связанные тесты CTS и следуйте инструкциям в разделе Проверка многооконного режима.

Версию Android. Тест CTS
7.0 /platform/cts/hostsidetests/services/activitymanager/src/android/server/cts
8.0 /platform/cts/hostsidetests/services/activityandwindowmanager/activitymanager/src/android/server/cts
9.0 /platform/cts/tests/framework/base/activitymanager/src/android/server/am
Android 10 и более поздних версий /platform/cts/tests/framework/base/windowmanager/src/android/server/wm