В 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 и выполните проверку многооконного режима .