SlideShare a Scribd company logo
1 of 18
MULTI WINDOW
ANDROID N
for developers
Dmitry Ustimov
Globus Ltd.
МНОГООКОННЫЙ РЕЖИМ
Split screen
Два приложения
отображаются рядом
или друг над другом.
Пользователь может
перетащить линию
разделения.
Free form
Пользователь может
любым образом
изменять размер
каждого окна.
Picture in Picture
Позволит
приложению
отображать контент,
пока пользователь
просматривает другие
приложения или
взаимодействует с
ними.
ПЕРЕКЛЮЧЕНИЕ В МНОГОКОННЫЙ
РЕЖИМ
▸Откройте Overview screen (Recents),
выполните long tap на заголовке активити
и перетащите её в обозначенную область
экрана
▸Если активити открыта на весь экран,
выполните long tap на кнопке Overview
(Recents)
Place your screenshot here
SPLIT SCREEN
Пример разделения экрана
между двумя
приложениями - Chrome и
Settings
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
Place your screenshot here
FREE FORM
Пример окна приложения
прозвольной формы
НАСТРОЙКА ПРИЛОЖЕНИЯ ДЛЯ MULTI
WINDOW
Добавьте в манифеcт в тэг <activity> следующий
атрибут*
android:resizeableActivity=[ "true", "false" ]
▸ true - активити может быть запущена в режимах split
screen и free form
▸ false - активити не поддерживает multi window mode и при
запуске займет весь экран**
* Если не указать, то по-умолчанию любая активити будет поддерживать multi
window mode.
** Ещё один случай, когда документация может не совпадать с реальностью
ПОДДЕРЖКА 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"/>
BACKGROUND РАСТЯГИВАНИЯ
Добавьте в стиль активити следующий параметр
values-v24/styles.xml
<item name="android:windowBackgroundFallback">color value or
reference</item>
ЗАПУСК НОВЫХ АКТИВИТИ
При запуске новой активити можно сообщить системе,
что окно новой активити следует показать рядом с
текущей, если это возможно
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);
ЖИЗНЕННЫЙ ЦИКЛ АКТИВИТИ
Многооконный режим не меняет жизненный цикл
активити*
* При изменении размера окна происходит пересоздание активити
УВЕДОМЛЕНИЯ АКТИВИТИ
Перед переходом в/из режима multi window, вызывается:
Activity#onMultiWindowModeChanged(boolean)
Узнать, в каком режиме сейчас находится активити:
Activity#isInMultiWindowMode()
Place your screenshot here
ПРИМЕР
Запустили приложение
I: onCreate()
I: onStart()
I: onResume()
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()
Place your screenshot here
Изменение размеров окна
I: onPause()
I: onSaveInstanceState()
I: onStop()
I: onDestroy()
I: onCreate()
I: onStart()
I: onRestoreInstanceState()
I: onResume()
Place your screenshot here
Переключение на другое окно
I: onPause()
Переключение обратно
I: onResume()
ЗАКЛЮЧЕНИЕ
▸Корректно обрабатывайте изменения
конфигурации и ориентации*
▸Создайте отзывчивый UI для любых
размеров экранов
▸Активити, запускаемые извне, должны
поддерживать multi window режим
* Если targetApi вашего приложения ниже 24, добавление
android:screenOrientation в манифесте означает, что активити не
поддерживает режим multi window
СПАСИБО ЗА ВНИМАНИЕ!
Вопросы?
https://developer.android.com/preview/features/multi-window.html

More Related Content

Similar to Дмитрий Устимов "Многооконный режим", Globus

Живые обои для Android. Как создать. Тонкости. Продвижение
Живые обои для Android. Как создать. Тонкости. ПродвижениеЖивые обои для Android. Как создать. Тонкости. Продвижение
Живые обои для Android. Как создать. Тонкости. ПродвижениеSergey Mikhaylov
 
Создание графического интерфейса пользователя мобильных Android приложений (ч...
Создание графического интерфейса пользователя мобильных Android приложений (ч...Создание графического интерфейса пользователя мобильных Android приложений (ч...
Создание графического интерфейса пользователя мобильных Android приложений (ч...metaform
 
Uneta 17.04.15 Bondarenko - What's NEW in Windows 10 SDK?
Uneta 17.04.15 Bondarenko - What's NEW in Windows 10 SDK?Uneta 17.04.15 Bondarenko - What's NEW in Windows 10 SDK?
Uneta 17.04.15 Bondarenko - What's NEW in Windows 10 SDK?UNETA
 
Денис Неклюдов. Держи свое приложение на волне новинок. РИФ-Воронеж 2016
Денис Неклюдов. Держи свое приложение на волне новинок. РИФ-Воронеж 2016Денис Неклюдов. Держи свое приложение на волне новинок. РИФ-Воронеж 2016
Денис Неклюдов. Держи свое приложение на волне новинок. РИФ-Воронеж 2016РИФ-Воронеж
 
#3 "Webpack и Vue.JS: Создание больших приложений и их расширение" Кирилл Кай...
#3 "Webpack и Vue.JS: Создание больших приложений и их расширение" Кирилл Кай...#3 "Webpack и Vue.JS: Создание больших приложений и их расширение" Кирилл Кай...
#3 "Webpack и Vue.JS: Создание больших приложений и их расширение" Кирилл Кай...JSib
 
Что нового в Android O (Grodno HTP)
Что нового в Android O (Grodno HTP)Что нового в Android O (Grodno HTP)
Что нового в Android O (Grodno HTP)Kirill Rozov
 
[JAM 1.0] Android OS, Java (Paul Malikov)
[JAM 1.0] Android OS, Java (Paul Malikov)[JAM 1.0] Android OS, Java (Paul Malikov)
[JAM 1.0] Android OS, Java (Paul Malikov)Evgeny Kaziak
 
Android: Как создать свое первое приложение?
Android: Как создать свое первое приложение?Android: Как создать свое первое приложение?
Android: Как создать свое первое приложение?Kuban Dzhakipov
 
Android Development Course in HSE lecture #1
Android Development Course in HSE lecture #1Android Development Course in HSE lecture #1
Android Development Course in HSE lecture #1Empatika
 
Android Development Course in HSE lecture #3
Android Development Course in HSE lecture #3Android Development Course in HSE lecture #3
Android Development Course in HSE lecture #3Empatika
 
Сидристый Станислав: Паттерны и антипаттерны BDD
Сидристый Станислав: Паттерны и антипаттерны BDDСидристый Станислав: Паттерны и антипаттерны BDD
Сидристый Станислав: Паттерны и антипаттерны BDDStanislav Sidristy
 
Особенности тестирования мобильных приложений (Android, iOS)
Особенности тестирования мобильных приложений (Android, iOS)Особенности тестирования мобильных приложений (Android, iOS)
Особенности тестирования мобильных приложений (Android, iOS)Эльвина Сакаева
 
Игорь Цеглевский: Взгляд практика на Android 6.0 Marshmallow
Игорь Цеглевский: Взгляд практика на Android 6.0 Marshmallow Игорь Цеглевский: Взгляд практика на Android 6.0 Marshmallow
Игорь Цеглевский: Взгляд практика на Android 6.0 Marshmallow Mobile Dimension
 
белогорцев глеб белогорцев
белогорцев глеб белогорцевбелогорцев глеб белогорцев
белогорцев глеб белогорцевrit2010
 
C# Web. Занятие 11.
C# Web. Занятие 11.C# Web. Занятие 11.
C# Web. Занятие 11.Igor Shkulipa
 
Droidcon Moscow 2015. Google Analytics и GTM для мобильных приложений Android...
Droidcon Moscow 2015. Google Analytics и GTM для мобильных приложений Android...Droidcon Moscow 2015. Google Analytics и GTM для мобильных приложений Android...
Droidcon Moscow 2015. Google Analytics и GTM для мобильных приложений Android...Mail.ru Group
 
DevCon 2016 - Xamarin
DevCon 2016 - XamarinDevCon 2016 - Xamarin
DevCon 2016 - XamarinAnton Shunkov
 

Similar to Дмитрий Устимов "Многооконный режим", Globus (20)

Живые обои для Android. Как создать. Тонкости. Продвижение
Живые обои для Android. Как создать. Тонкости. ПродвижениеЖивые обои для Android. Как создать. Тонкости. Продвижение
Живые обои для Android. Как создать. Тонкости. Продвижение
 
Создание графического интерфейса пользователя мобильных Android приложений (ч...
Создание графического интерфейса пользователя мобильных Android приложений (ч...Создание графического интерфейса пользователя мобильных Android приложений (ч...
Создание графического интерфейса пользователя мобильных Android приложений (ч...
 
Views обзор
Views обзорViews обзор
Views обзор
 
Лекция Android
Лекция AndroidЛекция Android
Лекция Android
 
Windows 10 SDK
Windows 10 SDKWindows 10 SDK
Windows 10 SDK
 
Uneta 17.04.15 Bondarenko - What's NEW in Windows 10 SDK?
Uneta 17.04.15 Bondarenko - What's NEW in Windows 10 SDK?Uneta 17.04.15 Bondarenko - What's NEW in Windows 10 SDK?
Uneta 17.04.15 Bondarenko - What's NEW in Windows 10 SDK?
 
Денис Неклюдов. Держи свое приложение на волне новинок. РИФ-Воронеж 2016
Денис Неклюдов. Держи свое приложение на волне новинок. РИФ-Воронеж 2016Денис Неклюдов. Держи свое приложение на волне новинок. РИФ-Воронеж 2016
Денис Неклюдов. Держи свое приложение на волне новинок. РИФ-Воронеж 2016
 
#3 "Webpack и Vue.JS: Создание больших приложений и их расширение" Кирилл Кай...
#3 "Webpack и Vue.JS: Создание больших приложений и их расширение" Кирилл Кай...#3 "Webpack и Vue.JS: Создание больших приложений и их расширение" Кирилл Кай...
#3 "Webpack и Vue.JS: Создание больших приложений и их расширение" Кирилл Кай...
 
Что нового в Android O (Grodno HTP)
Что нового в Android O (Grodno HTP)Что нового в Android O (Grodno HTP)
Что нового в Android O (Grodno HTP)
 
[JAM 1.0] Android OS, Java (Paul Malikov)
[JAM 1.0] Android OS, Java (Paul Malikov)[JAM 1.0] Android OS, Java (Paul Malikov)
[JAM 1.0] Android OS, Java (Paul Malikov)
 
Android: Как создать свое первое приложение?
Android: Как создать свое первое приложение?Android: Как создать свое первое приложение?
Android: Как создать свое первое приложение?
 
Android Development Course in HSE lecture #1
Android Development Course in HSE lecture #1Android Development Course in HSE lecture #1
Android Development Course in HSE lecture #1
 
Android Development Course in HSE lecture #3
Android Development Course in HSE lecture #3Android Development Course in HSE lecture #3
Android Development Course in HSE lecture #3
 
Сидристый Станислав: Паттерны и антипаттерны BDD
Сидристый Станислав: Паттерны и антипаттерны BDDСидристый Станислав: Паттерны и антипаттерны BDD
Сидристый Станислав: Паттерны и антипаттерны BDD
 
Особенности тестирования мобильных приложений (Android, iOS)
Особенности тестирования мобильных приложений (Android, iOS)Особенности тестирования мобильных приложений (Android, iOS)
Особенности тестирования мобильных приложений (Android, iOS)
 
Игорь Цеглевский: Взгляд практика на Android 6.0 Marshmallow
Игорь Цеглевский: Взгляд практика на Android 6.0 Marshmallow Игорь Цеглевский: Взгляд практика на Android 6.0 Marshmallow
Игорь Цеглевский: Взгляд практика на Android 6.0 Marshmallow
 
белогорцев глеб белогорцев
белогорцев глеб белогорцевбелогорцев глеб белогорцев
белогорцев глеб белогорцев
 
C# Web. Занятие 11.
C# Web. Занятие 11.C# Web. Занятие 11.
C# Web. Занятие 11.
 
Droidcon Moscow 2015. Google Analytics и GTM для мобильных приложений Android...
Droidcon Moscow 2015. Google Analytics и GTM для мобильных приложений Android...Droidcon Moscow 2015. Google Analytics и GTM для мобильных приложений Android...
Droidcon Moscow 2015. Google Analytics и GTM для мобильных приложений Android...
 
DevCon 2016 - Xamarin
DevCon 2016 - XamarinDevCon 2016 - Xamarin
DevCon 2016 - Xamarin
 

Дмитрий Устимов "Многооконный режим", Globus

  • 1. MULTI WINDOW ANDROID N for developers Dmitry Ustimov Globus Ltd.
  • 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
  • 6. Place your screenshot here FREE FORM Пример окна приложения прозвольной формы
  • 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);
  • 11. ЖИЗНЕННЫЙ ЦИКЛ АКТИВИТИ Многооконный режим не меняет жизненный цикл активити* * При изменении размера окна происходит пересоздание активити
  • 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