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))