앱이 SDK 35 이상을 타겟팅하면 전면이 전체 화면으로 표시됩니다. 시스템 상태 표시줄과 동작 탐색 메뉴는 투명하지만 3버튼 탐색 메뉴는 반투명합니다. enableEdgeToEdge
를 호출하여 하위 호환성을 유지합니다.
그러나 시스템 기본값이 모든 사용 사례에 적합하지 않을 수 있습니다. 투명 또는 반투명 시스템 표시줄을 사용하는 것이 적절한 경우를 간략히 알아보려면 Android 시스템 표시줄 디자인 가이드 및 가득 찬 화면 디자인 가이드를 참고하세요.
투명한 시스템 표시줄 만들기
Android 15 이상을 타겟팅하거나 이전 버전의 기본 인수로 enableEdgeToEdge()
를 호출하여 투명한 동작 탐색 메뉴를 만듭니다. 3버튼 탐색 메뉴의 경우 Window.setNavigationBarContrastEnforced
를 false
로 설정합니다. 그러지 않으면 반투명 스림이 적용됩니다.
반투명 시스템 표시줄 만들기
반투명 상태 표시줄을 만들려면 기본 콘텐츠와 겹치고 인셋으로 덮인 영역에 그라데이션을 그리는 맞춤 컴포저블을 만듭니다.
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) } }
적응형 앱의 경우 더 넓은 화면 디자인과 같이 각 창의 색상과 일치하는 맞춤 컴포저블을 삽입합니다. 반투명 탐색 메뉴를 만들려면 Window.setNavigationBarContrastEnforced
를 true로 설정합니다.