Реалізація 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 та адаптацію під складні екрани. Зв'яжіться з нами для діагностики вашого проєкту — оцінимо обсяг роботи та запропонуємо рішення під ваш стек.







