2016년 9월 28일 수요일

[안드로이드] 누가(7.0) 멀티윈도우 대응

안드로이드가 7.0으로 업데이트 되면서, 갤럭시 s3 이상 휴대폰에서만 볼수 있었던 멀티윈도우기능을 공식적으로 지원하게 되었다. 이로써, 멀티윈도우 기능은 모든 안드로이드 디바이스에 탑재될 것이고, 사용자의 안드로이드 UX로 자리매김할 것이다.

멀티윈도우?

  • 한 화면에 여러 앱이 실행 가능하도록 하는 기능
  • 동시에 실행되는 앱들은 독립적으로 실행되며, 드래그&드롭으로 데이터를 주고 받을 수 있다.
  • 화면 크기가 큰 기기는 제조사가 자유형식 모드를 이용하도록 할 수 있다.
    • 자유형식 모드 : 사용자가 엑티비티의 크기를 자유롭게 조정 가능
multiwindow

멀티윈도우 구현

사전 준비

  • 모듈 하위의 build.gradle을 열고, compileSdkVersiontargetSdkVersion을 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

댓글 없음:

댓글 쓰기