WindowInsets

#Android

1. WindowInsets?

시스템 UI 영역에 대한 정보를 담고 있는 객체이다.
시스템 UI 라고 하는 것은, Status Bar, Navigation Bar, IME(Keyboard), 노치나 엣지 영역을 의미한다.

1-1. WindowInsets으로 뭘 할 수 있을까?

시스템 UI 영역이 있다면, 우리가 만든 앱 UI 영역도 있다. 이 두 UI가 서로 조화롭게 배치되어야 사용자는 모바일의 기능들을 편리하게 사용할 수 있다. 우리는 WindowInsets의 정보를 이용하여 우리의 앱 UI를 적절하게 디스플레이하고, 반대로 우리 앱 UI/UX를 위해 시스템 UI 영역을 조정할 수 있다.


2. Compose에서 WindowInsets 사용하기

2-1. 시스템바(Status Bar, Navigation Bar)만큼 패딩 적용하기

@Composable
fun StatusBarPaddingBox() {
    val insets = WindowInsets.systemBars
    Box(
        modifier = Modifier
            .padding(
                top = with(LocalDensity.current) { insets.top.toDp() },
                bottom = with(LocalDensity.current) { insets.bottom.toDp() }
            )
            .background(Color.Gray)
    ) {
    }
}

2-2. 키보드(IME)만큼 패딩 적용하기

class MainActivity : ComponentActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        WindowCompat.setDecorFitsSystemWindows(window, false)
        setContent {}
    }
}

3. 참고 포스트