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