LayoutModifier
@JvmDefaultWithCompatibility
interface LayoutModifier : Modifier.Element
A Modifier.Element that changes how its wrapped content is measured and laid out. It has the
same measurement and layout functionality as the androidx.compose.ui.layout.Layout component,
while wrapping exactly one layout due to it being a modifier. In contrast, the
androidx.compose.ui.layout.Layout component is used to define the layout behavior of multiple
children.
Functions
fun MeasureScope.measure(measurable: Measurable, constraints: Constraints): MeasureResult
The function used to measure the modifier. The measurable corresponds to the wrapped
content, and it can be measured with the desired constraints according to the logic of the
LayoutModifier. The modifier needs to choose its own size, which can depend on the size
chosen by the wrapped content (the obtained Placeable), if the wrapped content was
measured. The size needs to be returned as part of a MeasureResult, alongside the placement
logic of the Placeable, which defines how the wrapped content should be positioned inside
the LayoutModifier. A convenient way to create the MeasureResult is to use the
MeasureScope.layout factory function.
A LayoutModifier uses the same measurement and layout concepts and principles as a
Layout, the only difference is that they apply to exactly one child. For a more detailed
explanation of measurement and layout, see MeasurePolicy.
fun IntrinsicMeasureScope.minIntrinsicWidth(measurable: IntrinsicMeasurable, height: Int): Int
The function used to calculate IntrinsicMeasurable.minIntrinsicWidth.
fun IntrinsicMeasureScope.minIntrinsicHeight(measurable: IntrinsicMeasurable, width: Int): Int
The lambda used to calculate IntrinsicMeasurable.minIntrinsicHeight.
fun IntrinsicMeasureScope.maxIntrinsicWidth(measurable: IntrinsicMeasurable, height: Int): Int
The function used to calculate IntrinsicMeasurable.maxIntrinsicWidth.
fun IntrinsicMeasureScope.maxIntrinsicHeight(measurable: IntrinsicMeasurable, width: Int): Int
The lambda used to calculate IntrinsicMeasurable.maxIntrinsicHeight.
Code Examples
LayoutModifierSample
@Composable
fun LayoutModifierSample() {
val verticalPadding =
object : LayoutModifier {
override fun MeasureScope.measure(
measurable: Measurable,
constraints: Constraints,
): MeasureResult {
// an example modifier that adds 50 pixels of vertical padding.
val padding = 50
val placeable = measurable.measure(constraints.offset(vertical = -padding))
return layout(placeable.width, placeable.height + padding) {
placeable.placeRelative(0, padding)
}
}
}
Box(Modifier.background(Color.Gray).then(verticalPadding)) {
Box(Modifier.fillMaxSize().background(Color.DarkGray))
}
}
