Как только ваше приложение перейдет на SDK 35 или более позднюю версию, будет принудительно реализована технология Edge-to-Edge . Системная строка состояния и панели навигации жестами станут прозрачными, но панель навигации с тремя кнопками также полупрозрачна. Для обеспечения обратной совместимости вызовите enableEdgeToEdge .
Однако системные настройки по умолчанию могут не подходить для всех случаев использования. Ознакомьтесь с рекомендациями по дизайну системных панелей Android и рекомендациями по дизайну «от края до края», чтобы узнать, когда следует использовать прозрачные или полупрозрачные системные панели.
Создать прозрачные системные панели
Создайте прозрачную панель навигации с поддержкой жестов, ориентируясь на Android 15 и более поздние версии, или вызвав enableEdgeToEdge() с аргументами по умолчанию для более ранних версий. Для трёхкнопочной панели навигации установите для 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.