GlobalPositionAwareModifierNode


A androidx.compose.ui.Modifier.Node whose onGloballyPositioned is called with the final LayoutCoordinates of the Layout when the global position of the content may have changed. Note that it will be called after a composition when the coordinates are finalized.

This is the androidx.compose.ui.Modifier.Node equivalent of androidx.compose.ui.layout.OnGloballyPositionedModifier

Usage example:

import androidx.compose.foundation.background import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.size import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color import androidx.compose.ui.layout.onGloballyPositioned import androidx.compose.ui.layout.positionInRoot import androidx.compose.ui.layout.positionInWindow import androidx.compose.ui.unit.dp Column(  Modifier.onGloballyPositioned { coordinates ->  // This will be the size of the Column.  coordinates.size  // The position of the Column relative to the application window.  coordinates.positionInWindow()  // The position of the Column relative to the Compose root.  coordinates.positionInRoot()  // These will be the alignment lines provided to the layout (empty here for Column).  coordinates.providedAlignmentLines  // This will be a LayoutCoordinates instance corresponding to the parent of Column.  coordinates.parentLayoutCoordinates  } ) {  Box(Modifier.size(20.dp).background(Color.Green))  Box(Modifier.size(20.dp).background(Color.Blue)) }
import androidx.compose.ui.Modifier import androidx.compose.ui.layout.LayoutCoordinates import androidx.compose.ui.layout.positionInRoot import androidx.compose.ui.layout.positionInWindow import androidx.compose.ui.node.GlobalPositionAwareModifierNode import androidx.compose.ui.node.ModifierNodeElement import androidx.compose.ui.platform.InspectorInfo class PositionLoggerNode(var id: String) : GlobalPositionAwareModifierNode, Modifier.Node() {  override fun onGloballyPositioned(coordinates: LayoutCoordinates) {  // This will be the size of the Layout.  coordinates.size  // The position of the Layout relative to the application window.  coordinates.positionInWindow()  // The position of the Layout relative to the Compose root.  coordinates.positionInRoot()  // These will be the alignment lines provided to the Layout  coordinates.providedAlignmentLines  // This will be a LayoutCoordinates instance corresponding to the parent of the Layout.  coordinates.parentLayoutCoordinates  } } data class PositionLoggerElement(val id: String) : ModifierNodeElement<PositionLoggerNode>() {  override fun create() = PositionLoggerNode(id)  override fun update(node: PositionLoggerNode) {  node.id = id  }  override fun InspectorInfo.inspectableProperties() {  name = "logPosition"  properties["id"] = id  } } fun Modifier.logPosition(id: String) = this then PositionLoggerElement(id)

Summary

Public functions

Unit

Called with the final LayoutCoordinates of the Layout after measuring.

Cmn

Inherited functions

From androidx.compose.ui.node.DelegatableNode
open Unit

Invoked when the density changes for this node.

Cmn
open Unit

Invoked when the layout direction changes for this node.

Cmn

Inherited properties

From androidx.compose.ui.node.DelegatableNode
Modifier.Node

A reference of the Modifier.Node that holds this node's position in the node hierarchy.

Cmn

Public functions

onGloballyPositioned

fun onGloballyPositioned(coordinates: LayoutCoordinates): Unit

Called with the final LayoutCoordinates of the Layout after measuring. Note that it will be called after a composition when the coordinates are finalized. The position in the modifier chain makes no difference in either the LayoutCoordinates argument or when the onGloballyPositioned is called.