{% setvar book_path %}/reference/androidx/_book.yaml{% endsetvar %} {% include "_shared/_reference-head-tags.html" %}

LayoutModifier

public interface LayoutModifier extends 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.

import androidx.compose.foundation.background
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.layout.Layout
import androidx.compose.ui.layout.LayoutModifier
import androidx.compose.ui.layout.Measurable
import androidx.compose.ui.layout.MeasureResult
import androidx.compose.ui.layout.MeasureScope
import androidx.compose.ui.layout.layout
import androidx.compose.ui.unit.Constraints
import androidx.compose.ui.unit.offset

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))
}
See also
Layout

Summary

Public methods

default int
maxIntrinsicHeight(
    @NonNull IntrinsicMeasureScope receiver,
    @NonNull IntrinsicMeasurable measurable,
    int width
)

The lambda used to calculate IntrinsicMeasurable.maxIntrinsicHeight.

default int
maxIntrinsicWidth(
    @NonNull IntrinsicMeasureScope receiver,
    @NonNull IntrinsicMeasurable measurable,
    int height
)

The function used to calculate IntrinsicMeasurable.maxIntrinsicWidth.

abstract @NonNull MeasureResult
measure(
    @NonNull MeasureScope receiver,
    @NonNull Measurable measurable,
    @NonNull Constraints constraints
)

The function used to measure the modifier.

default int
minIntrinsicHeight(
    @NonNull IntrinsicMeasureScope receiver,
    @NonNull IntrinsicMeasurable measurable,
    int width
)

The lambda used to calculate IntrinsicMeasurable.minIntrinsicHeight.

default int
minIntrinsicWidth(
    @NonNull IntrinsicMeasureScope receiver,
    @NonNull IntrinsicMeasurable measurable,
    int height
)

The function used to calculate IntrinsicMeasurable.minIntrinsicWidth.

Inherited methods

From androidx.compose.ui.Modifier
default @NonNull Modifier

Concatenates this modifier with another.

From androidx.compose.ui.Modifier.Element
default boolean
all(
    @NonNull Function1<@NonNull Modifier.Element, @NonNull Boolean> predicate
)

Returns true if predicate returns true for all Elements in this Modifier or if this Modifier contains no Elements.

default boolean
any(
    @NonNull Function1<@NonNull Modifier.Element, @NonNull Boolean> predicate
)

Returns true if predicate returns true for any Element in this Modifier.

default @NonNull R
<R extends Object> foldIn(
    @NonNull R initial,
    @NonNull Function2<@NonNull R, @NonNull Modifier.Element, @NonNull R> operation
)

Accumulates a value starting with initial and applying operation to the current value and each element from outside in.

default @NonNull R
<R extends Object> foldOut(
    @NonNull R initial,
    @NonNull Function2<@NonNull Modifier.Element, @NonNull R, @NonNull R> operation
)

Accumulates a value starting with initial and applying operation to the current value and each element from inside out.

Public methods

maxIntrinsicHeight

default int maxIntrinsicHeight(
    @NonNull IntrinsicMeasureScope receiver,
    @NonNull IntrinsicMeasurable measurable,
    int width
)

The lambda used to calculate IntrinsicMeasurable.maxIntrinsicHeight.

maxIntrinsicWidth

default int maxIntrinsicWidth(
    @NonNull IntrinsicMeasureScope receiver,
    @NonNull IntrinsicMeasurable measurable,
    int height
)

The function used to calculate IntrinsicMeasurable.maxIntrinsicWidth.

measure

abstract @NonNull MeasureResult measure(
    @NonNull MeasureScope receiver,
    @NonNull Measurable measurable,
    @NonNull Constraints constraints
)

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.

minIntrinsicHeight

default int minIntrinsicHeight(
    @NonNull IntrinsicMeasureScope receiver,
    @NonNull IntrinsicMeasurable measurable,
    int width
)

The lambda used to calculate IntrinsicMeasurable.minIntrinsicHeight.

minIntrinsicWidth

default int minIntrinsicWidth(
    @NonNull IntrinsicMeasureScope receiver,
    @NonNull IntrinsicMeasurable measurable,
    int height
)

The function used to calculate IntrinsicMeasurable.minIntrinsicWidth.