2. МНОГООКОННЫЙ РЕЖИМ
Split screen
Два приложения
отображаются рядом
или друг над другом.
Пользователь может
перетащить линию
разделения.
Free form
Пользователь может
любым образом
изменять размер
каждого окна.
Picture in Picture
Позволит
приложению
отображать контент,
пока пользователь
просматривает другие
приложения или
взаимодействует с
ними.
3. ПЕРЕКЛЮЧЕНИЕ В МНОГОКОННЫЙ
РЕЖИМ
▸Откройте Overview screen (Recents),
выполните long tap на заголовке активити
и перетащите её в обозначенную область
экрана
▸Если активити открыта на весь экран,
выполните long tap на кнопке Overview
(Recents)
4. Place your screenshot here
SPLIT SCREEN
Пример разделения экрана
между двумя
приложениями - Chrome и
Settings
5. FREE FORM НА ЭМУЛЯТОРЕ
$ adb shell
$ su
# setenforce 0
# settings put global enable_freeform_support 1
# cd data/local/tmp
# mkdir permissions
# cd permissions
# cp -a /system/etc/permissions/* ./
# sed -e ‘s/live_wallpaper/freeform_window_management/’ android.software.live_wallpaper.xml > freeform.xml
# mount --bind . /system/etc/permissions
# stop
# start
7. НАСТРОЙКА ПРИЛОЖЕНИЯ ДЛЯ MULTI
WINDOW
Добавьте в манифеcт в тэг <activity> следующий
атрибут*
android:resizeableActivity=[ "true", "false" ]
▸ true - активити может быть запущена в режимах split
screen и free form
▸ false - активити не поддерживает multi window mode и при
запуске займет весь экран**
* Если не указать, то по-умолчанию любая активити будет поддерживать multi
window mode.
** Ещё один случай, когда документация может не совпадать с реальностью
8. ПОДДЕРЖКА FREE FORM
Добавьте в манифеcт в тэг <activity> следующий блок
<layout
android:defaultHeight="size in dp"
android:defaultWidth="size in dp"
android:gravity="gravity flags"
android:minHeight="size in dp"
android:minWidth="size in dp"/>
9. BACKGROUND РАСТЯГИВАНИЯ
Добавьте в стиль активити следующий параметр
values-v24/styles.xml
<item name="android:windowBackgroundFallback">color value or
reference</item>
10. ЗАПУСК НОВЫХ АКТИВИТИ
При запуске новой активити можно сообщить системе,
что окно новой активити следует показать рядом с
текущей, если это возможно
Intent intent = new Intent(Intent.ACTION_VIEW,
Uri.parse("http://www.google.com"));
intent.setFlags(Intent.FLAG_ACTIVITY_LAUNCH_ADJACENT |
Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
12. УВЕДОМЛЕНИЯ АКТИВИТИ
Перед переходом в/из режима multi window, вызывается:
Activity#onMultiWindowModeChanged(boolean)
Узнать, в каком режиме сейчас находится активити:
Activity#isInMultiWindowMode()
13. Place your screenshot here
ПРИМЕР
Запустили приложение
I: onCreate()
I: onStart()
I: onResume()
14. Place your screenshot here
Переход в multi window режим
I: onMultiWindowModeChanged(true)
I: onPause()
I: onSaveInstanceState()
I: onStop()
I: onDestroy()
I: onCreate()
I: onStart()
I: onRestoreInstanceState()
I: onResume()
15. Place your screenshot here
Изменение размеров окна
I: onPause()
I: onSaveInstanceState()
I: onStop()
I: onDestroy()
I: onCreate()
I: onStart()
I: onRestoreInstanceState()
I: onResume()
16. Place your screenshot here
Переключение на другое окно
I: onPause()
Переключение обратно
I: onResume()
17. ЗАКЛЮЧЕНИЕ
▸Корректно обрабатывайте изменения
конфигурации и ориентации*
▸Создайте отзывчивый UI для любых
размеров экранов
▸Активити, запускаемые извне, должны
поддерживать multi window режим
* Если targetApi вашего приложения ниже 24, добавление
android:screenOrientation в манифесте означает, что активити не
поддерживает режим multi window