Android Nougat의 자유형 창 모드: 정의 및 개발자 활용 방법

click fraud protection

자유형 다중 창 모드는 Android Nougat에서 활용도가 낮고 평가도 낮은 기능입니다. 이것이 무엇인지, 그리고 개발자가 이를 어떻게 통합할 수 있는지 설명합니다.

에서 처음 시연한 자유형 창 모드 아르스 테크니카

Android 7.0 Nougat는 2016년 초에 처음 발표되었을 때 Android 플랫폼에 많은 요청을 받았던 기능인 다중 창 지원을 도입했습니다. 대부분의 사람들은 모든 Android Nougat 휴대폰 및 태블릿에서 기본적으로 분할 화면 다중 창 지원이 활성화되어 있다는 것을 알고 있습니다. Android Nougat가 탑재된 Android TV 기기는 PIP(Picture-in-Picture) 다중 창 지원을 지원합니다.

그러나 Android Nougat에는 많은 사람들이 알지 못하는 세 번째 다중 창 모드가 있습니다. 자유형 창 모드. 이 모드를 사용하면 Android는 사용자가 마음대로 이동하고 크기를 조정할 수 있는 부동 창으로 앱을 표시할 수 있습니다. 이는 본질적으로 Android의 스태킹 창 관리자.

에서 안드로이드 SDK 문서, 다음과 같이 명시되어 있습니다.

대형 장치 제조업체는 사용자가 각 활동의 크기를 자유롭게 조정할 수 있는 자유형 모드를 활성화하도록 선택할 수 있습니다. 제조업체가 이 기능을 활성화하면 장치는 분할 화면 모드 외에 자유형 모드도 제공합니다.

그리고 또한 안드로이드 7.0 CDD:

화면 크기가 특대형인 기기 구현은 자유형 모드를 지원해야 합니다(SHOULD).

이는 Android 7.0과 함께 제공되는 새로운 대형 화면 Android 기기에 제조업체에서 자유 형식 창 모드를 활성화할 가능성이 있음을 나타냅니다.

그러나 이는 절대 어려운 요구 사항이 아닙니다. 강제로 가능해요 어느 Android Nougat 장치(개발자 옵션 활성화)는 두 가지 방법 중 하나를 사용하여 자유형 창 모드를 지원합니다.


모든 Android Nougat 기기에서 자유형 창 모드 활성화

'활동 크기 조정 가능' 옵션을 켜면 앱이 모든 기기에서 자유 형식 모드로 실행될 수 있습니다.

방법 1(adb가 있는 컴퓨터가 필요함)

개발자 옵션에서 USB 디버깅이 활성화되어 있는지 확인하세요. 그런 다음 adb가 설치된 컴퓨터에 장치를 연결하고 다음 명령을 실행하십시오.

adb shell settings put global enable_freeform_support 1

방법 2(추가 요구 사항 없음)

개발자 옵션 하단에서 "활동 크기 조정 가능" 옵션을 활성화합니다.

두 방법 모두 적용하려면 시스템 UI를 다시 시작해야 합니다. 이를 수행하는 가장 쉬운 방법은 장치를 재부팅하는 것입니다(또는 장치가 루팅된 경우 간단히 종료할 수 있습니다). com.android.systemui 프로세스)


좋습니다. 자유 형식 모드가 활성화되었습니다. 이제 무엇을 해야 할까요?

방법 1을 사용하여 자유 형식 모드를 활성화한 경우 개요 메뉴의 앱 항목에 앱을 자유 형식 창 모드로 실행할 수 있는 새 버튼이 표시됩니다.

그러나 방법 2를 사용하면 Android 자체를 통해 자유 형식 모드로 앱을 시작할 수 없습니다. 다행스럽게도, 타사 런처에서 앱을 자유 형식 창 모드로 실행할 수 있습니다. API 레벨 24의 일부로 확정된 표준 Android API를 사용합니다.

자유 형식 모드에서 앱을 실행하는 핵심은 ActivityOptions.setLaunchBounds() 방법. 이 방법은 Rect 앱이 시작될 창 경계를 포함하는 인수로.

그런 다음 다음을 사용하여 앱을 시작할 수 있습니다. startActivity(Intent, Bundle). 아직 가지고 있지 않다면 ActivityOptions 번들을 사용하여 번들을 생성할 수 있습니다. ActivityOptions.makeBasic() 그리고 전화해 setLaunchBounds() 새로 생성된 번들에 있습니다.

기본적으로 개요 화면에 앱에 대한 작업이 이미 있는 경우 Android는 이전에 실행된 기존(전체 화면) 작업으로 사용자를 리디렉션합니다. 사용자. 자유 형식 창에서 앱을 실행하기 전에 개요에서 앱에 대한 모든 작업을 지워야 합니다. (다음에서 실행되는 활동이 있는 앱의 경우 standard 또는 singleTop 모드에서는 다음을 추가하여 새 창을 강제로 열 수 있습니다. Intent.FLAG_ACTIVITY_MULTIPLE_TASK 호출하기 전에 의도에 플래그를 지정합니다. startActivity().)


자유형 모드는 내부적으로 어떻게 작동하나요?

있다 훌륭한 기사 자유형 모드를 포함한 다중 창 모드가 Android Nougat에서 구현되는 방법을 설명합니다. (참고: 기사는 중국어로 작성되었으므로 반드시 Google 번역을 통해 실행하세요.)

간단히 말해서, 자유 형식 모드의 앱은 시스템의 나머지 부분(예: 가상 데스크톱)과 별도의 스택에서 실행됩니다. 따라서 자유 형식 앱을 런처나 다른 전체 화면 앱 위에서 실행할 수 없습니다.

자유 형식 모드에서 실행되는 앱( android: windowIsFloating true로 설정) DecorCaptionView 최상위 수준의 하위 항목으로 추가됨 DecorView. 이 보기에는 LinearLayout 창 이동, 최대화 및 닫기를 위해 창의 캡션 표시줄을 정의합니다. 개인적으로 권장하지는 않지만 다음을 통해 이 보기에 액세스하고 사용자 정의할 수 있습니다. DecorView 사용하여 Window.getDecorView(), 캐스팅 ViewGroup 그런 다음 하위 뷰에 액세스합니다.

Android의 표준 분할 화면 다중 창 모드에서 제대로 작동하도록 설계된 모든 앱은 자유 형식 모드에서도 작동합니다. isInMultiWindowMode() 자유 형식 모드에서 실행되는 앱의 경우 true를 반환합니다. 특히 자유 형식 모드와 관련하여 앱에서 사용할 수 있는 공개적으로 사용 가능한 몇 가지 다른 클래스 및 메서드가 있습니다.

  • Window.setDecorCaptionShade(): 이 메서드는 자유 형식 모드의 앱에 대한 캡션 컨트롤(최대화 및 닫기 버튼)의 음영을 재정의하는 데 사용할 수 있습니다.
  • Window.setRestrictedCaptionAreaListener(): 자유 형식 모드에서 창이 이동하는 시기를 감지하는 데 사용할 수 있습니다. 그만큼 Window.OnRectrictedCaptionAreaChangedListener 캡션 컨트롤의 위치가 변경될 때마다(사용자가 창을 이동할 때) 호출되며 Rect 캡션 컨트롤의 새로운 경계를 사용합니다.
  • ActivityInfo.WindowLayout: 이 클래스에는 앱이 실행 시 요청할 수 있는 자유 형식 창의 초기 위치 지정과 관련하여 앱의 매니페스트에 선언된 정보가 포함되어 있습니다. 예를 들어 다음 항목을 목록에 나열할 수 있습니다. 매니페스트의 태그:
     android: defaultHeight="640dp"
    android: defaultWidth="360dp"
    android: gravity="center" />
    그런 다음 장치가 이미 자유 형식 모드에 있고 앱이 실행되면 지정된 경계로 실행됩니다.

자유형 창 모드의 실제 예

작업 표시줄에 자유 형식 창 모드를 보완하기 위해 시작 메뉴와 최근 앱 트레이가 추가되었습니다.

2016년 여름, Android Nougat가 아직 개발자 프리뷰였을 때 저는 다음과 같은 앱을 출시했습니다. 작업 표시줄 시스템 오버레이에서 Windows와 유사한 시작 메뉴와 최근 앱 목록을 제공합니다. 이를 통해 Nougat 사용자는 자유 형식 창 모드에서 앱을 시작할 수 있으며, 작업 표시줄은 오버레이를 사용하므로 자유 형식 창 환경에서 화면에 계속 표시될 수 있습니다. 작업 표시줄과 자유 형식 모드의 조합은 모든 Android 장치, 특히 태블릿에 PC와 같은 느낌을 줍니다.

당신은 할 수 있습니다 작업 표시줄 다운로드 Google Play에서 또는 소스 코드 보기 GitHub에서 직접 확인해보세요. 이 기사에서 언급한 개념 외에도 화면에 자유 형식 창이 표시되지 않는 경우에도 자유 형식 환경을 활성 상태로 유지하기 위해 몇 가지 요령도 사용합니다. 사용자는 선택적으로 작업 표시줄을 기본 실행기로 설정하여 장치가 자유 형식 모드 환경으로 자동 부팅되도록 할 수도 있습니다.

(이 글을 쓰는 시점에서) OEM이 활성화한 자유 형식 창 지원이 공식적으로 제공되는 장치가 없기 때문에 권장합니다. 개발자가 지원하지 않는 장치의 자유 형식 창 환경에서 앱을 테스트하기 위한 도구로 작업 표시줄을 사용 그것.

작업 표시줄 외에도 앱을 자유 형식 모드로 실행할 수 있도록 AOSP의 Launcher3 소스 코드도 수정했습니다. 이는 자유 형식 앱을 실행하는 데 필요한 최소한의 수정 사항만 포함된 순정 Android 7.1.1 런처의 복제품입니다. 다른 개발자가 자신의 사용자 정의 실행 프로그램에서 자유 형식 창을 실행하기 위한 지원을 구현하기를 바라는 마음으로 이 수정된 실행 프로그램을 제공했습니다. 당신은 할 수 있습니다 소스 코드 보기 GitHub에서 또는 샘플 APK 다운로드.

저는 맞춤형 런처 개발자가 이 코드를 활용하고 자유 형식 실행을 지원할 수 있기를 바랍니다. 대형 화면에서 창 관리에 더 큰 유연성을 원하는 사용자를 위한 창 앱 장치.