# androidx.compose.foundation.relocation

Common/All

## Interfaces

|---|---|---|
| `https://developer.android.com/reference/kotlin/androidx/compose/foundation/relocation/BringIntoViewRequester` | Can be used to send `https://developer.android.com/reference/kotlin/androidx/compose/foundation/relocation/BringIntoViewRequester#bringIntoView(androidx.compose.ui.geometry.Rect)` requests. | Cmn |
| `https://developer.android.com/reference/kotlin/androidx/compose/foundation/relocation/BringIntoViewResponder` | **This interface is deprecated.** Use BringIntoViewModifierNode instead | Cmn |

## Modifiers

|---|---|---|
| `https://developer.android.com/reference/kotlin/androidx/compose/foundation/relocation/bringIntoViewRequester.modifier` | Modifier that can be used to send `https://developer.android.com/reference/kotlin/androidx/compose/foundation/relocation/BringIntoViewRequester#bringIntoView(androidx.compose.ui.geometry.Rect)` requests. | Cmn |
| `https://developer.android.com/reference/kotlin/androidx/compose/foundation/relocation/bringIntoViewResponder.modifier` | A parent that can respond to `https://developer.android.com/reference/kotlin/androidx/compose/foundation/relocation/BringIntoViewRequester` requests from its children, and adjust itself so that the item is visible on screen. | Cmn |

## Top-level functions summary

|---|---|---|
| `https://developer.android.com/reference/kotlin/androidx/compose/foundation/relocation/BringIntoViewRequester` | `@https://developer.android.com/reference/kotlin/androidx/compose/runtime/annotation/RememberInComposition https://developer.android.com/reference/kotlin/androidx/compose/foundation/relocation/package-summary#BringIntoViewRequester()()` Create an instance of `https://developer.android.com/reference/kotlin/androidx/compose/foundation/relocation/package-summary#BringIntoViewRequester()` that can be used with `https://developer.android.com/reference/kotlin/androidx/compose/foundation/relocation/bringIntoViewRequester.modifier#(androidx.compose.ui.Modifier).bringIntoViewRequester(androidx.compose.foundation.relocation.BringIntoViewRequester)`. | Cmn |

## Top-level functions

### BringIntoViewRequester

Cmn Artifact: [androidx.compose.foundation:foundation](https://developer.android.com/jetpack/androidx/releases/compose-foundation) [View Source](https://cs.android.com/search?q=file:androidx/compose/foundation/relocation/BringIntoViewRequester.kt+function:BringIntoViewRequester) Added in [1.1.0](https://developer.android.com/jetpack/androidx/releases/compose-foundation#1.1.0)

```
@RememberInComposition
fun BringIntoViewRequester(): BringIntoViewRequester
```

Create an instance of `https://developer.android.com/reference/kotlin/androidx/compose/foundation/relocation/package-summary#BringIntoViewRequester()` that can be used with `https://developer.android.com/reference/kotlin/androidx/compose/foundation/relocation/bringIntoViewRequester.modifier#(androidx.compose.ui.Modifier).bringIntoViewRequester(androidx.compose.foundation.relocation.BringIntoViewRequester)`. A child can then call `https://developer.android.com/reference/kotlin/androidx/compose/foundation/relocation/BringIntoViewRequester#bringIntoView(androidx.compose.ui.geometry.Rect)` to send a request to any `https://developer.android.com/reference/kotlin/androidx/compose/ui/relocation/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:

```kotlin
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:

```kotlin
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.material3.Button
import androidx.compose.material3.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")
        }
    }
}
```