Как только ваше приложение перейдет на 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.