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

Для удобства многие встроенные компоненты 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")
    }
)