Поддержка окон рабочего стола

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

На рисунке 1 вы можете увидеть организацию экрана при включенном оконном режиме рабочего стола. Что следует отметить:

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

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

Когда приложение открыто в окне рабочего стола, другие приложения также открываются в окнах рабочего стола.

Рис. 2. Нажмите, удерживайте и перетащите дескриптор окна приложения, чтобы перейти в окно рабочего стола.

Пользователи также могут вызвать оконный режим рабочего стола из меню, которое отображается под дескриптором окна, когда вы касаетесь или щелкаете его, либо используете мета-клавишу сочетания клавиш (Windows, Command или Search) + Ctrl + Down .

Пользователи выходят из оконного режима рабочего стола, закрыв все активные окна или захватив дескриптор окна в верхней части окна рабочего стола и перетащив приложение в верхнюю часть экрана. Сочетание клавиш Meta + H также позволяет выйти из окон рабочего стола и снова запустить приложения в полноэкранном режиме.

Чтобы вернуться к окну рабочего стола, коснитесь или щелкните плитку пространства рабочего стола на экране «Последние».

Изменение размера и режим совместимости

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

Рисунок 3. Изменение размера окна приложения с книжной ориентацией на альбомную.

Приложения, объявленные как неизменяемые (то есть resizeableActivity = false ), имеют масштабируемый пользовательский интерфейс с сохранением того же соотношения сторон.

Рис. 4. Пользовательский интерфейс приложения без изменения размера масштабируется по мере изменения размера окна.

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

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

Дополнительные сведения о режиме совместимости для приложений камеры см. в разделе Режим совместимости устройств .

Рисунок 5. Видоискатель камеры сохраняет свое соотношение сторон при изменении размера окна.

Настраиваемые вставки заголовков

Все приложения, работающие в оконном режиме рабочего стола, имеют панель заголовка, даже в режиме погружения .
Убедитесь, что содержимое вашего приложения не закрыто строкой заголовка. Панель заголовка представляет собой тип вставки строки заголовка: androidx.compose.foundation.layout.WindowInsets.Companion.captionBar() ; в представлениях WindowInsets.Type.captionBar() , который является частью системных панелей.

Вы можете узнать больше об обработке вставок в разделе Отображение содержимого от края до края в вашем приложении и об обработке вставок окон в Compose .

Панель заголовка также настраивается. В Android 15 появился тип внешнего вида APPEARANCE_TRANSPARENT_CAPTION_BAR_BACKGROUND который делает панель заголовка прозрачной и позволяет приложениям рисовать собственный контент внутри панели заголовка.

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

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

В Android 15 также появился метод WindowInsets#getBoundingRects() , который позволяет приложениям более подробно анализировать вставки в строке заголовка. Приложения могут различать области, в которых система рисует системные элементы, и неиспользуемые области, в которых приложения могут размещать пользовательский контент, не перекрывая элементы системы.

Список объектов Rect , возвращаемых API, указывает системные регионы, которых следует избегать. Любое оставшееся пространство (рассчитанное путем вычитания прямоугольников из вставок панели заголовка) — это то место, где приложение может рисовать без перекрытия системных элементов и с возможностью получать входные данные.

Chrome до и после реализации пользовательских заголовков.
Рисунок 6. Chrome до и после реализации пользовательских заголовков.

Многозадачность и поддержка нескольких экземпляров

Многозадачность лежит в основе окон рабочего стола, и разрешение нескольких экземпляров вашего приложения может значительно повысить производительность пользователей.

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

Управляйте экземплярами приложений с помощью жестов перетаскивания

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

Рисунок 7. Запустите новый экземпляр Chrome, перетащив вкладку из окна рабочего стола.

В Android 15 представлены два флага для настройки поведения перетаскивания:

  • DRAG_FLAG_START_INTENT_SENDER_ON_UNHANDLED_DRAG : указывает, что необработанное перетаскивание должно быть делегировано системе для запуска, если ни одно видимое окно не обрабатывает это падение. При использовании этого флага вызывающая сторона должна предоставить ClipData Item , который содержит неизменяемый IntentSender для запускаемого действия (см. ClipData.Item.Builder#setIntentSender() ). Система может запускать намерение или нет в зависимости от таких факторов, как текущий размер экрана или оконный режим. Если система не запускает намерение, оно отменяется посредством обычного процесса перетаскивания.

  • DRAG_FLAG_GLOBAL_SAME_APPLICATION : указывает, что операция перетаскивания может пересекать границы окна (для нескольких экземпляров одного и того же приложения).

    Когда startDragAndDrop() вызывается с установленным этим флагом, только видимые окна, принадлежащие одному и тому же приложению, могут участвовать в операции перетаскивания и получать перетаскиваемый контент.

Рисунок 8. Перемещение вкладки между двумя экземплярами приложения Chrome.

Дополнительные оптимизации

Настраивайте запуск приложений и переводите приложения из оконного режима рабочего стола в полноэкранный режим.

Укажите размер и положение по умолчанию

Не всем приложениям, даже если их размер можно изменить, требуется большое окно, чтобы предложить пользователю ценность. Вы можете использовать метод ActivityOptions#setLaunchBounds() чтобы указать размер и положение по умолчанию при запуске действия.

Войдите в полноэкранный режим с рабочего стола

Приложения могут переходить в полноэкранный режим программно, вызывая Activity#requestFullScreenMode() . Этот метод переводит приложение в полноэкранный режим прямо из окна рабочего стола.