onGloballyPositioned
Functions summary
Modifier |
Modifier.onGloballyPositioned(Invoke |
Cmn
|
Functions
Modifier.onGloballyPositioned
fun Modifier.onGloballyPositioned(
onGloballyPositioned: (LayoutCoordinates) -> Unit
): Modifier
Invoke onGloballyPositioned with the LayoutCoordinates of the element 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 callback will be invoked at least once when the LayoutCoordinates are available, and every time the element's position changes within the window. However, it is not guaranteed to be invoked every time the position relative to the screen of the modified element changes. For example, the system may move the contents inside a window around without firing a callback. If you are using the LayoutCoordinates to calculate position on the screen, and not just inside the window, you may not receive a callback.
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)) }