androidx.compose.foundation.relocation
Interfaces
BringIntoViewRequester |
Can be used to send |
Cmn
|
BringIntoViewResponder |
This interface is deprecated. Use BringIntoViewModifierNode instead |
Cmn
|
Modifiers
bringIntoViewRequester |
Modifier that can be used to send |
Cmn
|
bringIntoViewResponder |
A parent that can respond to |
Cmn
|
Top-level functions summary
BringIntoViewRequester |
Create an instance of |
Cmn
|
Top-level functions
BringIntoViewRequester
@RememberInComposition
fun BringIntoViewRequester(): BringIntoViewRequester
Create an instance of BringIntoViewRequester that can be used with Modifier.bringIntoViewRequester. A child can then call BringIntoViewRequester.bringIntoView to send a request to any BringIntoViewModifierNode parent so that they adjust its content to bring this item into view.
Here is a sample where a composable is brought into view:
import androidx.compose.foundation.horizontalScroll import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Row import androidx.compose.foundation.relocation.BringIntoViewRequester import androidx.compose.foundation.relocation.bringIntoViewRequester import androidx.compose.foundation.rememberScrollState import androidx.compose.runtime.Composable import androidx.compose.runtime.remember import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.ui.Modifier import androidx.compose.ui.focus.focusTarget import androidx.compose.ui.focus.onFocusChanged Row(Modifier.horizontalScroll(rememberScrollState())) { repeat(100) { val bringIntoViewRequester = remember { BringIntoViewRequester() } val coroutineScope = rememberCoroutineScope() Box( Modifier // This associates the RelocationRequester with a Composable that wants to be // brought into view. .bringIntoViewRequester(bringIntoViewRequester) .onFocusChanged { if (it.isFocused) { coroutineScope.launch { // This sends a request to all parents that asks them to scroll so // that this item is brought into view. bringIntoViewRequester.bringIntoView() } } } .focusTarget() ) } }
Here is a sample where a part of a composable is brought into view:
import androidx.compose.foundation.Canvas import androidx.compose.foundation.border import androidx.compose.foundation.horizontalScroll import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.size import androidx.compose.foundation.relocation.BringIntoViewRequester import androidx.compose.foundation.relocation.bringIntoViewRequester import androidx.compose.foundation.rememberScrollState import androidx.compose.material.Button import androidx.compose.material.Text import androidx.compose.runtime.Composable import androidx.compose.runtime.remember import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.ui.Modifier import androidx.compose.ui.geometry.Offset import androidx.compose.ui.geometry.Rect import androidx.compose.ui.graphics.Color import androidx.compose.ui.platform.LocalDensity import androidx.compose.ui.unit.dp with(LocalDensity.current) { val bringIntoViewRequester = remember { BringIntoViewRequester() } val coroutineScope = rememberCoroutineScope() Column { Box( Modifier.border(2.dp, Color.Black) .size(500f.toDp()) .horizontalScroll(rememberScrollState()) ) { Canvas( Modifier.size(1500f.toDp(), 500f.toDp()) // This associates the RelocationRequester with a Composable that wants // to be brought into view. .bringIntoViewRequester(bringIntoViewRequester) ) { drawCircle(color = Color.Red, radius = 250f, center = Offset(750f, 250f)) } } Button( onClick = { val circleCoordinates = Rect(500f, 0f, 1000f, 500f) coroutineScope.launch { // This sends a request to all parents that asks them to scroll so that // the circle is brought into view. bringIntoViewRequester.bringIntoView(circleCoordinates) } } ) { Text("Bring circle into View") } } }