안드로이드가 7.0으로 업데이트 되면서, 갤럭시 s3 이상 휴대폰에서만 볼수 있었던 멀티윈도우기능을 공식적으로 지원하게 되었다. 이로써, 멀티윈도우 기능은 모든 안드로이드 디바이스에 탑재될 것이고, 사용자의 안드로이드 UX로 자리매김할 것이다.
멀티윈도우?
- 한 화면에 여러 앱이 실행 가능하도록 하는 기능
- 동시에 실행되는 앱들은 독립적으로 실행되며, 드래그&드롭으로 데이터를 주고 받을 수 있다.
- 화면 크기가 큰 기기는 제조사가 자유형식 모드를 이용하도록 할 수 있다.
- 자유형식 모드 : 사용자가 엑티비티의 크기를 자유롭게 조정 가능
멀티윈도우 구현
사전 준비
- 모듈 하위의
build.gradle
을 열고,compileSdkVersion
,targetSdkVersion
을24
로 변경한다.targetSdkVersion
가24
보다 낮으면,compileSdkVersion
이24
로 설정되어 있더라도, 시스템은 이 앱을 멀티윈도우 지원불가로 인식하고, 무조건 전체화면으로만 앱을 실행하게 된다.targetSdkVersion
을24
로 설정하면,compileSdkVersion
에 상관없이, 시스템은 이 앱을 멀티윈도우 지원가능으로 인식한다. 단, 기본 크기로 고정되어 있어서 크기변경이 불가능하고, 어떤 부작용이 나타날지 알 수 없다.
android {
compileSdkVersion 24
defaultConfig {
targetSdkVersion 24
...
}
...
}
멀티윈도우 사용
compileSdkVersion
이24
로 설정되어 있어야 한다.- 매니페스트 파일에
<activity>
/<application>
태그에서resizeableActivity
속성을 이용하여 멀티윈도우 기능을 활성/비활성시킬 수 있다.
android:resizeableActivity=["true" | "false"]
targetSdkVersion
이24
이면, 이 속성을 지정하지 않았을 경우 기본값은 true이다.
Picture In Picture(PIP) 사용
- PIP : 동영상처럼 사용자의 상호작용이 없더라도, 앱이 자동으로 계속 실행되도록 해주는 기능
- 매니페스트 파일에
<activity>
태그에서supportsPictureInPicture
속성을 이용하여 해당 엑티비티가 이 모드를 지원하는지 여부를 지정한다.
android:supportsPictureInPicture=["true" | "false"]
resizeableActivity
속성이 false인 경우, 이 속성은 무시된다.
멀티윈도우 크기 설정
- 멀티윈도우 모드에서 앱의 크기를 변경할 수 있도록 설정하려면, / 태그 하위에
<layout>
태그를 추가하고, 다음과 같은 속성을 통해 크기를 지정해준다.- defaultWidth : 자유형식 모드에서 엑티비티가 시작될 때의 기본 너비
- defaultHeight : 자유형식 모드에서 엑티비티가 시작될 때의 기본 높이
- gravity : 자유형식 모드에서 엑티비티의 초기 배치
- minWidth : 자유형식 / 화면분할 모드에서 엑티비티의 최소 너비
- minHeight : 자유형식 / 화면분할 모드에서 엑티비티의 최소 높이
멀티윈도우에서의 life-cycle
- 멀티윈도우 모드에서 Activity, Fragment의 생명주기는 변하지 않고 그대로 동작한다.
- 현재 사용자와 상호작용중인 엑티비티가 최상단 엑티비티가 되어 활성화되고, 다른 화면의 엑티비티는 화면은 표시되지만 Pause 상태로 있다.
- 멀티윈도우 상태에서는 Pause 상태이지만, 화면에 계속 보이는 상태이므로, 동영상 플레이어 등은 pause에서 동영상을 중지하면 안된다.
멀티윈도우 모드에서 비활성화되는 기능
- 시스템 UI 사용자지정 옵션 비활성화
screenOrientation
속성 변경 무시
멀티윈도우 변경 콜백
- 멀티윈도우 상태 변경에 따른 콜백메서드 및 상태확인 메서드가 존재한다.
- 다음 메서드는 엑티비티, 프레그먼트 모두 추가되었다.
onMultiWindowModeChanged()
: 현재 화면이 멀티윈도우 모드로 들어가거나, 나올때 호출되는 메서드onPictureInPictureModeChanged()
: 현재 화면이 PIP 모드로 들어가거나, 나올때 호출되는 메서드isInMultiWindowMode()
: 현재 화면이 멀티윈도우 모드인지 확인isInPictureInPictureMode()
: 현재 화면이 PIP 모드인지 확인 - 이 때,isInMultiWindowMode()
는 무조건 true
댓글 없음:
댓글 쓰기