창 인셋 정보

Android 플랫폼은 상태 표시줄 및 탐색 메뉴와 같은 시스템 UI를 그리는 역할을 합니다. 이 시스템 UI는 사용자가 사용하는 앱과 관계없이 표시됩니다.

WindowInsets 는 앱이 올바른 영역에 그려지고 UI가 시스템 UI에 의해 가려지지 않도록 시스템 UI에 관한 정보를 제공합니다.

더 넓은 화면으로 이동하여 시스템 표시줄 뒤에 그리기
그림 1. 시스템 표시줄 뒤에 그리기 위해 더 넓은 화면에 콘텐츠 표시

Android 14 (API 수준 34) 이하에서는 앱의 UI가 기본적으로 시스템 표시줄 및 디스플레이 컷아웃 아래에 그려지지 않습니다.

Android 15 (API 수준 35) 이상에서는 앱이 SDK 35를 타겟팅하면 앱이 시스템 표시줄 및 디스플레이 컷아웃 아래에 그려집니다. 이렇게 하면 사용자 환경이 더 원활해지고 앱에서 사용 가능한 창 공간을 최대한 활용할 수 있습니다.

시스템 UI 뒤에 콘텐츠를 표시하는 것을 더 넓은 화면에 콘텐츠 표시 라고 합니다. 이 페이지에서는 다양한 유형의 인셋, 더 넓은 화면에 콘텐츠를 표시하는 방법, 인셋 API를 사용하여 UI에 애니메이션을 적용하고 앱의 콘텐츠가 시스템 UI 요소에 의해 가려지지 않도록 하는 방법을 알아봅니다.

인셋 기본사항

앱이 더 넓은 화면에 콘텐츠를 표시하는 경우 중요한 콘텐츠와 상호작용이 시스템 UI에 의해 가려지지 않도록 해야 합니다. 예를 들어 버튼이 탐색 메뉴 뒤에 배치되면 사용자가 버튼을 클릭하지 못할 수 있습니다.

시스템 UI의 크기와 배치 위치에 관한 정보는 인셋 을 사용하여 지정됩니다.

시스템 UI의 각 부분에는 크기와 배치 위치를 설명하는 상응하는 유형의 인셋이 있습니다. 예를 들어 상태 표시줄 인셋은 상태 표시줄의 크기와 위치를 제공하는 반면 탐색 메뉴 인셋은 탐색 메뉴의 크기와 위치를 제공합니다. 각 유형의 인셋은 상단, 왼쪽, 오른쪽, 하단의 네 가지 픽셀 크기로 구성됩니다. 이러한 크기는 시스템 UI가 앱 창의 상응하는 측면에서 얼마나 확장되는지 지정합니다. 따라서 이러한 유형의 시스템 UI와 겹치지 않도록 앱 UI는 해당 크기만큼 인셋되어야 합니다.

이러한 기본 제공 Android 인셋 유형은 WindowInsets를 통해 사용할 수 있습니다.

WindowInsets.statusBars

상태 표시줄을 설명하는 인셋입니다. 알림 아이콘 및 기타 표시기가 포함된 상단 시스템 UI 표시줄입니다.

WindowInsets.statusBarsIgnoringVisibility

상태 표시줄이 표시될 때의 상태 표시줄 인셋입니다. 상태 표시줄이 몰입형 전체 화면 모드로 전환되어 숨겨진 경우 기본 상태 표시줄 인셋은 비어 있지만 이러한 인셋은 비어 있지 않습니다.

WindowInsets.navigationBars

탐색 메뉴를 설명하는 인셋입니다. 기기의 왼쪽, 오른쪽 또는 하단에 있는 시스템 UI 표시줄로, 작업 표시줄 또는 탐색 아이콘을 설명합니다. 사용자가 선호하는 탐색 방법과 작업 표시줄과의 상호작용에 따라 런타임에 변경될 수 있습니다.

WindowInsets.navigationBarsIgnoringVisibility

탐색 메뉴가 표시될 때의 탐색 메뉴 인셋입니다. 탐색 메뉴가 몰입형 전체 화면 모드로 전환되어 숨겨진 경우 기본 탐색 메뉴 인셋은 비어 있지만 이러한 인셋은 비어 있지 않습니다.

WindowInsets.captionBar

자유 형식 창에 있는 경우 상단 제목 표시줄과 같은 시스템 UI 창 장식을 설명하는 인셋입니다.

WindowInsets.captionBarIgnoringVisibility

자막 표시줄이 표시될 때의 자막 표시줄 인셋입니다. 자막 표시줄이 숨겨진 경우 기본 자막 표시줄 인셋은 비어 있지만 이러한 인셋은 비어 있지 않습니다.

WindowInsets.systemBars

상태 표시줄, 탐색 메뉴, 자막 표시줄을 포함하는 시스템 표시줄 인셋의 합집합입니다.

WindowInsets.systemBarsIgnoringVisibility

시스템 표시줄이 표시될 때의 시스템 표시줄 인셋입니다. 시스템 표시줄이 몰입형 전체 화면 모드로 전환되어 숨겨진 경우 기본 시스템 표시줄 인셋은 비어 있지만 이러한 인셋은 비어 있지 않습니다.

WindowInsets.ime

소프트 키보드가 차지하는 하단의 공간 크기를 설명하는 인셋입니다.

WindowInsets.imeAnimationSource

현재 키보드 애니메이션 이전 에 소프트 키보드가 차지한 공간 크기를 설명하는 인셋입니다.

WindowInsets.imeAnimationTarget

현재 키보드 애니메이션 에 소프트 키보드가 차지할 공간 크기를 설명하는 인셋입니다.

WindowInsets.tappableElement

탐색 UI에 관한 자세한 정보를 설명하는 인셋 유형으로, 앱이 아닌 시스템에서 '탭'을 처리할 공간 크기를 제공합니다. 동작 탐색이 있는 투명한 탐색 메뉴의 경우 일부 앱 요소를 시스템 탐색 UI를 통해 탭할 수 있습니다.

WindowInsets.tappableElementIgnoringVisibility

탭할 수 있는 요소가 표시될 때의 탭할 수 있는 요소 인셋입니다. 탭할 수 있는 요소가 몰입형 전체 화면 모드로 전환되어 숨겨진 경우 기본 탭할 수 있는 요소 인셋은 비어 있지만 이러한 인셋은 비어 있지 않습니다.

WindowInsets.systemGestures

시스템에서 탐색을 위한 동작을 가로채는 인셋의 크기를 나타내는 인셋입니다. 앱은 Modifier.systemGestureExclusion을 사용하여 이러한 동작의 제한된 양을 처리하도록 수동으로 지정할 수 있습니다.

WindowInsets.mandatorySystemGestures

시스템에서 항상 처리하고 Modifier.systemGestureExclusion을 사용하여 선택 해제할 수 없는 시스템 동작의 하위 집합입니다.

WindowInsets.displayCutout

디스플레이 컷아웃 (노치 또는 핀홀)과 겹치지 않도록 하는 데 필요한 간격 크기를 나타내는 인셋입니다.

WindowInsets.waterfall

Waterfall 디스플레이의 곡선 영역을 나타내는 인셋입니다. Waterfall 디스플레이에는 기기의 측면을 따라 화면이 래핑되기 시작하는 화면 가장자리를 따라 곡선 영역이 있습니다.

이러한 유형은 콘텐츠가 가려지지 않도록 하는 세 가지 '안전한' 인셋 유형으로 요약됩니다.

이러한 '안전한' 인셋 유형은 기본 플랫폼 인셋을 기반으로 다양한 방식으로 콘텐츠를 보호합니다.

  • WindowInsets.safeDrawing을 사용하여 시스템 UI 아래에 그려서는 안 되는 콘텐츠를 보호합니다. 이는 인셋의 가장 일반적인 사용 사례로, 시스템 UI에 의해 부분적으로 또는 완전히 가려지는 콘텐츠가 그려지지 않도록 하는 것입니다.
  • WindowInsets.safeGestures를 사용하여 동작이 있는 콘텐츠를 보호합니다. 이렇게 하면 시스템 동작이 앱 동작 (예: 하단 시트, 캐러셀 또는 게임의 동작)과 충돌하지 않습니다.
  • WindowInsets.safeContentWindowInsets.safeDrawingWindowInsets.safeGestures의 조합으로 사용하여 콘텐츠에 시각적 겹침과 동작 겹침이 없도록 합니다.