Programowe żądanie fokusu

W niektórych ścieżkach użytkownika aplikacja musi wyraźnie przenieść fokus na określony komponent. Jeśli na przykład użytkownik kliknie przycisk „Szukaj”, możesz automatycznie przenieść fokus na pole do wprowadzania danych wyszukiwania.

Używanie FocusRequester

Aby wyraźnie poprosić o skupienie się na elemencie:

  1. Utwórz i zapamiętaj instancję FocusRequester:val focusRequester = remember { FocusRequester() }
  2. Dołącz FocusRequester do docelowego komponentu za pomocą modyfikatora focusRequester.
  3. Wywołaj funkcję requestFocus() w wywołaniu zwrotnym zdarzenia (np. onClick) lub w zakresie współprogramu.

val focusRequester = remember { FocusRequester() }
var text by remember { mutableStateOf("") }

TextField(
    value = text,
    onValueChange = { text = it },
    modifier = Modifier.focusRequester(focusRequester)
)

val focusRequester = remember { FocusRequester() }
var text by remember { mutableStateOf("") }

TextField(
    value = text,
    onValueChange = { text = it },
    modifier = Modifier.focusRequester(focusRequester)
)

Button(onClick = { focusRequester.requestFocus() }) {
    Text("Request focus on TextField")
}

Ustawianie fokusu na ekranie początkowym

Aby po pojawieniu się ekranu ustawić początkowy fokus na konkretnym komponencie, wywołaj requestFocus() w ramach LaunchedEffect(Unit):

LaunchedEffect(Unit) {
    focusRequester.requestFocus()
}

Podczas przechodzenia między kontenerami lub powracania z innego ekranu możesz też dołączać focusRestorer() do kontenerów nadrzędnych, aby automatycznie przywracać fokus do ostatniego elementu podrzędnego, na którym był fokus. Więcej informacji znajdziesz w przewodniku Przywracanie stanu skupienia.