PaddingValues ​​кроме bottomPadding в Jetpack Compose

Проблема

Я ищу способ изменить , чтобы они не включалиBottomPadding. Моя текущая реализация выглядит так, но здесь мне нужно пройтиLayoutDirection, что кажется действительно неуклюжим.

      fun PaddingValues.exceptBottomPadding(layoutDirection: LayoutDirection) =
    PaddingValues(
        top = calculateTopPadding(),
        bottom = 0.dp,
        end = calculateEndPadding(layoutDirection),
        start = calculateStartPadding(layoutDirection)
    )

Сначала я надеялся, что будет способ изменения класса данных, напримерmyPadding.copy(bottom = 0.dp), но нет, это было бы слишком просто...


вариант использования

Я собираюсь «от края до края» с моим приложением Material3-Android. За это мойScaffoldпредоставляет мойcontentс (включительноInsets).

Тем не менее, мой основной вид прокрутки содержимого также должен быть от края до края, поэтому я хотел бы игнорировать нижнюю частьPaddingValues.(Позже я снова добавлю его в качестве заполнения содержимого, но это достаточно просто).

Что-то вроде:

      Scaffold(
    topBar = { ... },
) { paddingWithInset ->
    LazyColumn(
        modifier = Modifier.padding(paddingWithInset.exceptBottomPadding()),
        contentPadding = PaddingValues(bottom = paddingWithInset.calculateBottomPadding())
    ) {
        ...
    }
}

Я попытался просто применить полныйpaddingWithInsetкакcontentPadding, но это сводит на нет overscrollEffect


Редактировать

The exceptBottomPaddingможет ок. быть составным, что позволяет получить доступ кLocalLayoutDirection. Тем не менее, это все еще кажется неуклюжим.

      @Composable
fun PaddingValues.exceptBottomPadding(): PaddingValues {
    val layoutDirection = LocalLayoutDirection.current

    return PaddingValues(
        top = calculateTopPadding(),
        bottom = 0.dp,
        end = calculateEndPadding(layoutDirection),
        start = calculateStartPadding(layoutDirection)
    )
}

1 ответ

Я выполнил общую функцию расширения:

          @Composable
    fun PaddingValues.copy(
        start: Dp? = null,
        top: Dp? = null,
        end: Dp? = null,
        bottom: Dp? = null
    ): PaddingValues {
        val layoutDirection = LocalLayoutDirection.current
        return PaddingValues(
            start = start ?: this.calculateStartPadding(layoutDirection),
            top = top ?: this.calculateTopPadding(),
            end = end ?: this.calculateEndPadding(layoutDirection),
            bottom = bottom ?: this.calculateBottomPadding(),
        )
    }

И я использую это так:

      Column(paddingValues = it.copy(bottom = 0.dp))
Другие вопросы по тегам