Поддержка нескольких окон

В 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 производители устройств могут поддерживать оконный режим рабочего стола для создания многооконной конфигурации в произвольном формате, используя параметр «Включить оконный режим рабочего стола» .

Оконный рабочий стол

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

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

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

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

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

Режим Полноэкранный режим для портативных устройств Полноэкранное воспроизведение с рук на подключенный дисплей. Полноэкранный режим — большой экран, расширяющийся на подключенный дисплей. Оконный рабочий стол — первый большой экран
Пример форм-фактора Мобильный телефон Мобильный телефон, поддерживающий подключение через HDMI к внешнему дисплею. Планшет с поддержкой подключения через HDMI к внешнему дисплею. Планшет с клавиатурой, поддерживающий подключение через HDMI к внешнему дисплею.
Внутреннее отображение Поддерживаются полноэкранный режим, разделенный экран, режим «картинка в картинке», а также свободная форма отображения (не для настольных компьютеров). Поддержка полноэкранного режима, разделенного экрана и режима «картинка в картинке» Поддержка полноэкранного режима, разделенного экрана и режима «картинка в картинке» (PiP) при работе с отдельными рабочими столами. Режим оконного отображения рабочего стола является режимом по умолчанию (поддерживаются отдельные рабочие столы); пользователи могут переходить в полноэкранный или сенсорный режим оконного отображения рабочего стола, используя отдельные рабочие столы.
Опыт использования подключенных дисплеев Дублирование только внутреннего дисплея Отображение окон рабочего стола только на подключенных дисплеях. Расширение рабочего стола за счет оконного режима позволяет увеличить рабочую поверхность; доступно на внутренних дисплеях. Расширение рабочего стола за счет оконного режима позволяет увеличить рабочую поверхность; доступно на внутренних дисплеях.
Настройки конфигурации
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) как кандидатов для работы в оконном режиме рабочего стола. Дисплей должен считаться подходящим диспетчером окон (как минимум, общедоступным и доверенным, см. раздел «Работа в оконном режиме рабочего стола »). По умолчанию система пытается запускать задачи в свободном режиме на этих дисплеях.

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