Защита системной панели

Если ваше приложение использует SDK 35 или более поздней версии, показ от края до края будет включен по умолчанию. Строка состояния и панель навигации жестами прозрачные, а панель навигации с тремя кнопками – полупрозрачная. Чтобы обеспечить обратную совместимость, вызовите enableEdgeToEdge.

Однако системные настройки по умолчанию могут подходить не для всех случаев. Ознакомьтесь с рекомендациями по дизайну системных строк Android и рекомендациями по дизайну приложений с поддержкой полноэкранного режима, чтобы узнать, когда следует использовать прозрачные или полупрозрачные системные строки.

Создайте прозрачные системные строки

Создайте прозрачную панель навигации жестами, выбрав в качестве целевой версии Android 15 или более позднюю или вызвав метод enableEdgeToEdge() с аргументами по умолчанию для более ранних версий. Для панели навигации с тремя кнопками задайте для Window.setNavigationBarContrastEnforced значение false, иначе будет применена полупрозрачная сетка.

Как создать полупрозрачные системные строки

Чтобы создать полупрозрачную строку состояния, создайте пользовательскую composable-функцию, которая перекрывает основной контент и рисует градиент в области, покрытой отступами.

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,
) {
    Spacer(
        modifier = Modifier
            .fillMaxWidth()
            .height(
                with(LocalDensity.current) {
                    (WindowInsets.statusBars.getTop(this) * 1.2f).toDp()
                }
            )
            .background(
                brush = Brush.verticalGradient(
                    colors = listOf(
                        color.copy(alpha = 1f),
                        color.copy(alpha = 0.8f),
                        Color.Transparent
                    )
                )
            )
    )
}

Рисунок 1. полупрозрачная строка состояния.

Для адаптивных приложений вставьте настраиваемую composable-функцию, которая соответствует цветам каждой панели, как показано в разделе Дизайн во весь экран. Чтобы создать полупрозрачную панель навигации, задайте для Window.setNavigationBarContrastEnforced значение true.