Lucas Kivi
11/08/2024, 10:48 PMDmitry Strekha
11/11/2024, 12:06 PMSeri
11/11/2024, 4:19 PMpadding
, your use-case might be better implemented with the layout
modifier. The example in this article, showing how firstBaselineToTop
is implemented, may help out!
https://developer.android.com/develop/ui/compose/layouts/customSeri
11/11/2024, 4:21 PM.layout { }
modifer to adjust a containers position offset without recomposing the container itselfLucas Kivi
11/13/2024, 6:00 PMModifier.layout
implementation, but it seems to be causing recompositions.Lucas Kivi
11/13/2024, 6:01 PMSeri
11/13/2024, 7:29 PM.layout { measurable, constraints ->
// Measure the app bar
val placeable = measurable.measure(constraints)
// Place it above the screen, according to the scroll offset
layout(placeable.width, placeable.height + appBarOffset) {
placeable.place(0, appBarOffset)
}
}
Lucas Kivi
11/13/2024, 8:17 PM/**
* Helper method to allow padding modifications to skip recompositions.
*/
fun Modifier.padding(
paddingValuesProvider: () -> PaddingValues,
): Modifier = layout { measurable, constraints ->
val paddingValues = paddingValuesProvider()
val topPaddingPx = paddingValues.calculateTopPadding().roundToPx()
val bottomPaddingPx = paddingValues.calculateBottomPadding().roundToPx()
val leftPaddingPx = paddingValues.calculateLeftPadding(layoutDirection).roundToPx()
val rightPaddingPx = paddingValues.calculateRightPadding(layoutDirection).roundToPx()
val horizontal = (leftPaddingPx + rightPaddingPx).coerceAtLeast(0)
val vertical = (topPaddingPx + bottomPaddingPx).coerceAtLeast(0)
val placeable = measurable.measure(constraints.offset(-horizontal, -vertical))
val layoutWidth = constraints.constrainWidth(placeable.width + horizontal)
val layoutHeight = constraints.constrainHeight(placeable.height + vertical)
layout(layoutWidth, layoutHeight) {
placeable.placeRelative(leftPaddingPx, topPaddingPx)
}
}