본문
170424(월) - Android 7.0 <Multi-window>
Android 7.0 <Multi-window>
- Overview
ㆍAPI Level 24 or higher
ㆍ사용자는 두개의 앱을 하나의 화면에 띄울 수 있다.
- Android 7.0에서는 두 개의 앱을 실행 가능하며 사용자는 구분선을 조정하여 앱의 크기를 조정 가능
- Android TV 디바이스에서는 picture-in-picture mode 로 다른 컨텐츠를 탐색할때도 계속 콘텐츠를 표시 가능
ㆍ특히 대형화면 장치에서 multi-window의 장점이 돋보인다.
ㆍ앱에서 drag-and-drop을 사용하여 사용자 편리성과 경험을 향상 가능
ㆍminimum allowable dimensions를 통해 해당 크기 아래로 조정 불가능하게 옵션 가능
ㆍmulti-window 사용 불가 모드 가능
ㆍLarge devices manufactures는 창크기를 자유롭게 선택 가능한 freedom mode를 제공 가능하다.
ㆍuser는 drag-and-drop을 통해서 서로다른 분할된 스크린끼리 데이터를 공유 가능하다.
- Multi-Window Lifecycle
ㆍMulti-window mode는 Activity lifecycle을 변경하지 않는다.
ㆍ사용자가 가장 최근에 상호작용한 activity만 주어진 시간에 활성화 되고 이 activity는 최상위가 된다.
ㆍ다른 activity는 일지정지 상태
ㆍsystem은 not visible activity보다 일시중지 된 activity에 더 높은 순위를 부여한다.
ㆍuser가 일시정지된 activity와 상호작용하면 resumed 하고, 이전 최상위 activity는 pause 된다.
- Note
ㆍpause 된 상태라도 사용자에게 계속 보여진다.
ㆍpause 된 상태여도 앱이 계속 activity는 계속 동작되어야 하는 상황도 존재한다.
- video playing app
- video app은 onPause()에서 비디오를 일시정지 하지 않는것이 좋다.
- onStop에서 일시중지, onStart()에서 다시시작.
ㆍmulti-window 모드에 들어가면 시스템은 activity의 configuration을 변경한다. (app resizing, full-screen mode에도 동일동작)
ㆍ Handling Configuration Changes 에 의해서 app은 변경되거나 destroy되었다가 다시 create 될 수 있다.
ㆍnewly exposed area에서 lag이 발생될 경우 시스템은 windowBackground 나 windowBackgroundFallback 의 지정된 색상으로 일시적으로 해당 area를 채운다.
- Configuring your app for Muiti-Window Mode
ㆍAPI Level 24+ 이면 multi-window 사용 가능
ㆍmanifest에 size 및 layout 속성을 setting 가능하다.
ㆍtask stack의 root에 속성이 적용되면 나머니 activity들도 전부 적용된다.
- android:resizeableActivity 등
ㆍAPI level 23 이하의 multi-orientation app에서 멀티 윈도우를 실행하면 제대로 동작하지 않을 수 있다는 경고문구 제공.
ㆍ시스템은 fixed-orientation app에 대해서 크기를 조정하지 않으며 전체화면으로 열리게 된다.
- android:resizeableActivty
ㆍ디폴트는 true
ㆍ<activity> or <application>
android:resizeableActivity=["true" | "false"]
- android:supportsPictureInPicture
ㆍ<activity>
ㆍ설정되면 android:resizeableActivity의 false는 자동으로 무시된다.
android:supportsPictureInPicture=["true" | "false"]
- Layout attributes
ㆍ<layout> 속성
- android:defaultWidth
freeform 모드에서 default width
- android:defaultHeight
freeform 모드에서 default height
- android:gravity
freeform 모드에서 시작될때 초기 배치
- android:minHeight, android:minWidth
minimum height와 width를 정한다.
<activity android:name=".MyActivity">
<layout android:defaultHeight="500dp"
android:defaultWidth="600dp"
android:gravity="top|end"
android:minHeight="450dp"
android:minWidth="300dp" />
</activity>
- Running your app in Multi-Window Mode
ㆍDisabled features in multi-window mode
multi-window 모드일때 disable되는 기능들이 있다.
- System UI customization 옵션이 disable 된다.
ex) 전체화면이 아니면 status bar 숨김이 불가능
- android:screenOrientation 속성이 무시된다.
ㆍMulti-window change notification and querying
multi-window 모드 여부 확인
picture-in-picture 모드 여부 확인
picture-in-picture 모드는 multi-window 모드의 특별한 경우이므로, isInPictureInPictureMode()가 true이면 isInMultiWindowMode()도 true이다.
multi-window 모드에 들어가거나(true) 나올때(false) 호출됨
- onPictureInPictureModeChanged()
picture-in-picture 모드에 들어가거나(true) 나올때(false) 호출됨
Fragment 클래스는 이런 메소드의 여러 version을 보여준다.
ㆍEntering picture-in-picture mode
Activity.enterPictureInPictureMode()
picture-in-picture 모드로 진입시킴
ㆍLaunch new Activities in Multi-window mode
디바이스가 분할 화면 모드일 때, system은 현재 activity 옆에 새로운 activity를 만들려고 시도하고 두 개의 activity는 화면을 공유한다.
ActivityOptions.setLaunchBounds()
디바이스가 freeform 모드이면 위의 메소드를 호출하여 dimensions와 screen location을 조정 가능하다.
- task stack 안에서 새로운 액티비티를 실행시키면, 기존 activity를 대체하여 표시되며 multi-window의 속성을 모두 상속 받는다.
- 따라서 multi-window 모드에서 새로운 activity를 띄우기를 원하면 새로운 task stack 에서 실행시켜야 한다.
ㆍSupporting drag and drop
drop 받는 app의 권한을 가지고 있는 Token object
ㆍDRAG_FLAG_GLOBAL 플래그 사용
ㆍ DRAG_FLAG_GLOBAL_URI_READ
or DRAG_FLAG_GLOBAL_URI_WRITE
- URI permission 획득을 위해서 사용
drag 중인 작업 취소
drag 중인 shadow (?) 교체.
- Activity.requestDragAndDropPermissions()
DragEvent에 포함되어 있는 ClipData의 content URIs의 permission을 요구
ㆍIf your app targets API level 23 or lower
app이 fixed orientation을 선언하지 않는 한 system이 강제로 app의 크기를 조정한다.
- fixed orientation
app을 multi-window 모드로 설정해줘야 한다.
- not fixed orientation
Android 7.0 이상의 기기에서 앱을 실행해야 한다.
'Mobile > Android API' 카테고리의 다른 글
170612(월) - Android 6.0 APIs (0) | 2017.06.12 |
---|---|
170425(화) - Android 7.0 <Notification Enhancements> (0) | 2017.04.25 |
170418(화) - Java 8 언어 기능 사용 (0) | 2017.04.18 |
170411(화) - System permission (0) | 2017.04.11 |
170411(화) - Device Compatibility (0) | 2017.04.11 |
댓글