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