시스템 표시줄 보호

앱이 SDK 35 이상을 타겟팅하면 전면이 전체 화면으로 표시됩니다. 시스템 상태 표시줄과 동작 탐색 메뉴는 투명하지만 3버튼 탐색 메뉴는 반투명합니다. enableEdgeToEdge를 호출하여 하위 호환성을 유지합니다.

그러나 시스템 기본값이 모든 사용 사례에 적합하지 않을 수 있습니다. 투명 또는 반투명 시스템 표시줄을 사용하는 것이 적절한 경우를 간략히 알아보려면 Android 시스템 표시줄 디자인 가이드가득 찬 화면 디자인 가이드를 참고하세요.

투명한 시스템 표시줄 만들기

Android 15 이상을 타겟팅하거나 이전 버전의 기본 인수로 enableEdgeToEdge()를 호출하여 투명한 동작 탐색 메뉴를 만듭니다. 3버튼 탐색 메뉴의 경우 Window.setNavigationBarContrastEnforcedfalse로 설정합니다. 그러지 않으면 반투명 스림이 적용됩니다.

반투명 시스템 표시줄 만들기

반투명 상태 표시줄을 만들려면 기본 콘텐츠와 겹치고 인셋으로 덮인 영역에 그라데이션을 그리는 맞춤 컴포저블을 만듭니다.

class SystemBarProtectionSnippets : ComponentActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        // enableEdgeToEdge sets window.isNavigationBarContrastEnforced = true
        // which is used to add a translucent scrim to three-button navigation
        enableEdgeToEdge()

        setContent {
            MyTheme {
                // Main content
                MyContent()

                // After drawing main content, draw status bar protection
                StatusBarProtection()
            }
        }
    }
}

@Composable
private fun StatusBarProtection(
    color: Color = MaterialTheme.colorScheme.surfaceContainer,
    heightProvider: () -> Float = calculateGradientHeight(),
) {

    Canvas(Modifier.fillMaxSize()) {
        val calculatedHeight = heightProvider()
        val gradient = Brush.verticalGradient(
            colors = listOf(
                color.copy(alpha = 1f),
                color.copy(alpha = .8f),
                Color.Transparent
            ),
            startY = 0f,
            endY = calculatedHeight
        )
        drawRect(
            brush = gradient,
            size = Size(size.width, calculatedHeight),
        )
    }
}

@Composable
fun calculateGradientHeight(): () -> Float {
    val statusBars = WindowInsets.statusBars
    val density = LocalDensity.current
    return { statusBars.getTop(density).times(1.2f) }
}

그림 1. 반투명 상태 표시줄

적응형 앱의 경우 더 넓은 화면 디자인과 같이 각 창의 색상과 일치하는 맞춤 컴포저블을 삽입합니다. 반투명 탐색 메뉴를 만들려면 Window.setNavigationBarContrastEnforced를 true로 설정합니다.