Как использовать вставки Material 3

Для простоты использования многие встроенные composable-функции Material 3 (androidx.compose.material3) сами обрабатывают отступы в зависимости от того, как эти функции размещены в приложении в соответствии со спецификациями Material.

Функции для обработки вставок

Ниже приведен список компонентов Material, которые автоматически обрабатывают вставки.

Панели приложения

  • TopAppBar / CenterAlignedTopAppBar / MediumTopAppBar / LargeTopAppBar. Применяет верхнюю и горизонтальные стороны системных строк в качестве отступов, поскольку они используются в верхней части окна.
  • BottomAppBar – применяет нижнюю и боковые стороны системных строк в качестве полей.

Контейнеры контента

Scaffold

По умолчанию Scaffold предоставляет отступы в качестве параметра PaddingValues, который вы можете использовать. Scaffold не применяет вставки к контенту. Это ваша задача. Например, чтобы использовать эти вставки с LazyColumn внутри Scaffold:

Scaffold { innerPadding ->
    // innerPadding contains inset information for you to use and apply
    LazyColumn(
        // consume insets as scaffold doesn't do it by default
        modifier = Modifier.consumeWindowInsets(innerPadding),
        contentPadding = innerPadding
    ) {
        // ..
    }
}

На видео ниже показан элемент LazyColumn в Scaffold с отключенным и включенным режимом отображения от края до края.

Чтобы убрать элементы интерфейса из областей системного интерфейса и вырезов на экране, обычно достаточно использовать параметр PaddingValues в Scaffold. Если вы используете Scaffold, не применяйте другие способы обработки отступов, например линейки, модификаторы отступов или модификаторы размера отступов, чтобы не добавлять слишком много отступов в интерфейс.

Переопределить вставки по умолчанию

Вы можете изменить параметр windowInsets, передаваемый в composable-функцию, чтобы настроить ее поведение. В качестве этого параметра можно передать другой тип отступа или отключить его, передав пустой экземпляр: WindowInsets(0, 0, 0, 0).

Например, чтобы отключить обработку вставок в LargeTopAppBar, задайте для параметра windowInsets пустой экземпляр:

LargeTopAppBar(
    windowInsets = WindowInsets(0, 0, 0, 0),
    title = {
        Text("Hi")
    }
)