Android 플랫폼은 상태 표시줄 및 탐색 메뉴와 같은 시스템 UI를 그리는 역할을 합니다. 이 시스템 UI는 사용자가 사용하는 앱과 관계없이 표시됩니다.
WindowInsets
는 앱이 올바른 영역에 그려지고 UI가 시스템 UI로 가려지지 않도록 시스템 UI에 관한 정보를 제공합니다.

Android 14 (API 수준 34) 이하에서는 앱의 UI가 기본적으로 시스템 표시줄 및 디스플레이 컷아웃 아래에 표시되지 않습니다.
Android 15 (API 수준 35) 이상에서는 앱이 SDK 35를 타겟팅하면 앱이 시스템 표시줄 아래에 그려지고 잘림 부분이 표시됩니다. 이렇게 하면 더 원활한 사용자 환경을 제공하고 앱에서 사용 가능한 창 공간을 최대한 활용할 수 있습니다.
시스템 UI 뒤에 콘텐츠를 표시하는 것을 더 넓은 화면을 활용한다고 합니다. 이 페이지에서는 다양한 유형의 인셋, 전체 화면으로 전환하는 방법, 인셋 API를 사용하여 UI에 애니메이션을 적용하고 앱 콘텐츠가 시스템 UI 요소로 가려지지 않도록 하는 방법을 알아봅니다.
인셋 기본사항
앱이 더 넓은 화면에 표시되면 중요한 콘텐츠와 상호작용이 시스템 UI에 가려지지 않도록 해야 합니다. 예를 들어 버튼이 탐색 메뉴 뒤에 배치된 경우 사용자가 버튼을 클릭하지 못할 수 있습니다.
시스템 UI의 크기와 배치 위치에 관한 정보는 인셋을 통해 지정됩니다.
시스템 UI의 각 부분에는 크기와 배치 위치를 나타내는 상응하는 유형의 인셋이 있습니다. 예를 들어 상태 표시줄 인셋은 상태 표시줄의 크기와 위치를 제공하는 반면 탐색 메뉴 인셋은 탐색 메뉴의 크기와 위치를 제공합니다. 각 유형의 인셋은 상단, 왼쪽, 오른쪽, 하단의 4가지 픽셀 크기로 구성됩니다. 이 크기는 시스템 UI가 앱 창의 해당 측면에서 얼마나 확장되는지를 지정합니다. 따라서 이러한 유형의 시스템 UI와 겹치지 않도록 하려면 앱 UI를 해당 크기만큼 안쪽으로 넣어야 합니다.
다음과 같은 기본 제공 Android 인셋 유형은 WindowInsets
를 통해 사용할 수 있습니다.
상태 표시줄을 설명하는 인셋입니다. 알림 아이콘과 기타 표시기가 포함된 상단 시스템 UI 표시줄입니다. |
|
상태 표시줄이 표시될 때의 인셋입니다. 몰입형 전체 화면 모드로 전환되어 현재 상태 표시줄이 숨겨져 있는 경우 기본 상태 표시줄 인셋은 비어 있지만 이러한 인셋은 비어 있지 않습니다. |
|
탐색 메뉴를 설명하는 인셋 기기의 왼쪽, 오른쪽 또는 하단에 있는 시스템 UI 막대로, 태스크 바 또는 탐색 아이콘을 설명합니다. 이는 사용자의 선호 탐색 방법과 작업 표시줄과의 상호작용에 따라 런타임에 변경될 수 있습니다. |
|
탐색 메뉴가 표시될 때의 탐색 메뉴 인셋 몰입형 전체 화면 모드로 전환되어 탐색 메뉴가 현재 숨겨져 있는 경우 기본 탐색 메뉴 인셋은 비어 있지만 이러한 인셋은 비어 있지 않습니다. |
|
상단 제목 표시줄과 같이 자유 형식 창에 있는 경우 시스템 UI 창 장식을 설명하는 인셋입니다. |
|
자막이 표시될 때 자막 표시줄이 안으로 들어가도록 합니다. 자막 표시줄이 현재 숨겨져 있으면 기본 자막 표시줄 인셋은 비어 있지만 이러한 인셋은 비어 있지 않습니다. |
|
상태 표시줄, 탐색 메뉴, 자막 표시줄을 포함한 시스템 표시줄 인셋의 합집합입니다. |
|
시스템 표시줄이 표시될 때의 인셋입니다. 몰입형 전체 화면 모드로 전환하여 현재 시스템 바가 숨겨져 있으면 기본 시스템 바 인셋이 비어 있지만 이러한 인셋은 비어 있지 않습니다. |
|
소프트웨어 키보드가 차지하는 하단의 공간 크기를 나타내는 인셋입니다. |
|
현재 키보드 애니메이션 전에 소프트웨어 키보드가 차지한 공간의 양을 나타내는 인셋입니다. |
|
현재 키보드 애니메이션 후 소프트웨어 키보드가 차지할 공간의 양을 나타내는 인셋입니다. |
|
탐색 UI에 관한 더 자세한 정보를 설명하는 인셋 유형으로, '탭'이 앱이 아닌 시스템에서 처리되는 공간의 양을 제공합니다. 동작 탐색이 있는 투명한 탐색 메뉴의 경우 일부 앱 요소는 시스템 탐색 UI를 통해 탭할 수 있습니다. |
|
탭 가능한 요소가 표시될 때의 인셋입니다. 탭 가능한 요소가 현재 숨겨져 있는 경우 (몰입형 전체 화면 모드로 전환되어서) 기본 탭 가능한 요소 인셋은 비어 있지만 이러한 인셋은 비어 있지 않습니다. |
|
시스템이 탐색을 위해 동작을 가로채는 인셋의 양을 나타내는 인셋입니다. 앱은 |
|
항상 시스템에서 처리하며 |
|
디스플레이 컷아웃 (노치 또는 핀홀)과 겹치지 않도록 하는 데 필요한 간격을 나타내는 인셋입니다. |
|
폭포식 디스플레이의 곡선 영역을 나타내는 인셋입니다. 워터폴 디스플레이는 화면이 기기 측면을 따라 래핑되기 시작하는 화면 가장자리에 곡선이 있는 영역이 있습니다. |
이러한 유형은 콘텐츠가 가려지지 않도록 하는 세 가지 '안전한' 인셋 유형으로 요약됩니다.
이러한 '안전한' 인셋 유형은 기본 플랫폼 인셋에 따라 다양한 방식으로 콘텐츠를 보호합니다.
WindowInsets.safeDrawing
를 사용하여 시스템 UI 아래에 그려져서는 안 되는 콘텐츠를 보호합니다. 이는 시스템 UI에 의해 부분적으로 또는 완전히 가려진 콘텐츠를 그리지 않도록 하는 가장 일반적인 인셋 사용 사례입니다.WindowInsets.safeGestures
를 사용하여 동작으로 콘텐츠를 보호합니다. 이렇게 하면 시스템 동작이 앱 동작 (예: 하단 시트, 캐러셀 또는 게임의 동작)과 충돌하는 것을 방지할 수 있습니다.WindowInsets.safeContent
를WindowInsets.safeDrawing
및WindowInsets.safeGestures
의 조합으로 사용하여 콘텐츠에 시각적 중복이나 동작 중복이 없도록 합니다.
추천 서비스
- 참고: JavaScript가 사용 중지되어 있으면 링크 텍스트가 표시됩니다.
- Material 구성요소 및 레이아웃
CoordinatorLayout
를 Compose로 이전- 기타 고려사항