Реализация Multi-Window для Android: Split-Screen, PiP, Freeform
Разбитый интерфейс при перетаскивании разделителя в Split-Screen — частая жалоба пользователей Android 7+. Многие приложения, годами работавшие в полноэкранном режиме, при делении экрана теряют половину функционала: кнопки накладываются, списки не скроллятся, видеоплеер останавливается. Наш опыт с 15+ проектами по адаптации UI показывает, что корректная поддержка Multi-Window требует не просто пары флагов в манифесте, а перепроектирования адаптивности с учётом всех трёх режимов: Split-Screen, Picture-in-Picture (PiP) и Freeform. Мы гарантируем стабильную работу на всех форм-факторах — от телефонов до складных устройств.
Почему стоит добавлять поддержку Multi-Window заранее?
Если приложение не объявляет android:resizeableActivity="true" явно, начиная с Android 12 оно всё равно попадает в split-screen — пользователь может вручную включить режим через недокументированные опции. Результат — Activity пересоздаётся при каждом изменении разделителя, теряя состояние. Мы предотвращаем это: настраиваем configChanges, обрабатываем onConfigurationChanged() через WindowMetrics API (API 30+) и применяем WindowSizeClass из androidx.window:window для адаптивного UI. Это гарантирует плавное изменение размеров без потери данных. Сертифицированные инженеры с 7+ лет опыта проводят аудит и внедрение.
Как мы реализуем полную поддержку Multi-Window?
Процесс включает четыре этапа:
| Этап | Действия | Инструменты |
|---|---|---|
| Анализ | Аудит текущего UI на уязвимости к изменению размеров | Android Studio Layout Inspector, Device File Explorer |
| Проектирование | Выбор стратегии: configChanges + ручная обработка или полный переход на Compose с WindowSizeClass |
androidx.window, Jetpack Compose |
| Реализация | Настройка манифеста, обработка onConfigurationChanged, адаптация layout под Compact/Medium/Expanded |
Kotlin, XML, Compose |
| Тестирование | Проверка на физических устройствах (планшет, складной, десктопный режим ChromeOS) | Firebase Test Lab, TestRail |
На одном из проектов для финансового сервиса мы переписали экран транзакций на Compose с BoxWithConstraints. Вместо хардкода “если ширина > 600dp — показывать две колонки” использовали WindowWidthSizeClass. После развёртывания число жалоб на нечитаемый интерфейс в split-screen упало на 30% за месяц — это в 2 раза эффективнее предыдущего подхода.
Picture-in-Picture: как не сломать плеер
PiP актуален для видеоприложений. Мы внедряем enterPictureInPictureMode() с PictureInPictureParams, добавляем RemoteAction для управления воспроизведением (пауза, следующий трек). Критичная ошибка — остановка плеера в onStop(). Решение флагается через isInPictureInPictureMode:
override fun onStop() { super.onStop() if (!isInPictureInPictureMode) { player.pause() } } Колбэк onPictureInPictureModeChanged() скрывает элементы управления, оставляя только видео. Для приёмников Drag and Drop между окнами используем View.setOnDragListener() с API 24, а с API 33 — DropHelper из androidx.draganddrop.
Сравнение режимов Multi-Window
| Характеристика | Split-Screen | PiP | Freeform |
|---|---|---|---|
| Минимальный API | 24 (Android 7.0) | 26 (Android 8.0) | 24 (на устройствах ChromeOS) |
| Размер окна | Половина экрана, изменяемый перетаскиванием | Маленькое плавающее окно (25% экрана) | Произвольный размер, перемещаемы |
| Типичное использование | Одновременная работа двух приложений | Просмотр видео во время других действий | Многозадачность на больших экранах |
| Особенности реализации | android:resizeableActivity="true" + configChanges |
PictureInPictureParams, RemoteAction |
Freeform не требует дополнительных разрешений, но нужно тестирование в desktop mode |
Для складных устройств (Galaxy Z Fold) дополнительно используем WindowLayoutInfo от androidx.window:window — отслеживаем состояние шарнира и адаптируем UI (half-opened, tabletop mode). Без этой библиотеки корректная поддержка невозможна.
Что входит в работу
Мы предоставляем:
- Аудит текущего кода на уязвимости к Multi-Window
- Настройку манифеста и обработки конфигураций
- Реализацию адаптивного UI (Compose или View)
- Внедрение PiP с RemoteAction
- Интеграцию Drag and Drop между окнами
- Тестирование на 5+ устройствах разных форм-факторов
- Документацию по изменениям и рекомендации по доработкам
Сроки: от 3 до 7 дней в зависимости от сложности UI. Оценка проекта бесплатно — пишите на почту или через форму на сайте.
Технические детали: WindowManager для складных устройств
Библиотека androidx.window:window версии 1.3.x предоставляет WindowInfoTracker, возвращающий Flow<WindowLayoutInfo>. Используем его для обнаружения folded/half-opened состояний. Это особенно важно для Galaxy Z Fold и других складных — игнорирование приводит к тому, что приложение не реагирует на изменение угла шарнира и выглядит "застывшим".
Наш опыт с 5+ проектами для складных и планшетов показывает: качественная поддержка Multi-Window повышает retention на 10–15% (по данным внутренней аналитики клиентов). Мы используем сертифицированную среду для тестирования на реальных устройствах в Firebase Test Lab. Подробнее в официальной документации Android Developers: Multi-Window Support.
Заключение
Готовое к Multi-Window приложение — не роскошь, а требование пользователей Android. Мы настраиваем не только Split-Screen, но и PiP, Freeform и адаптацию под складные экраны. Свяжитесь с нами для диагностики вашего проекта — оценим объём работы и предложим решение под ваш стек.







