プログラムでフォーカスをリクエストする

一部のユーザーフローでは、アプリでフォーカスを特定のコンポーネントに明示的に移動する必要があります。たとえば、ユーザーが [検索] ボタンをクリックしたときに、検索入力フィールドに自動的にフォーカスを移動させたい場合があります。

FocusRequester を使用する

明示的にフォーカスをリクエストするには:

  1. FocusRequester インスタンスを作成して記憶します: val focusRequester = remember { FocusRequester() }。
  2. focusRequester 修飾子を使用して、FocusRequester をターゲット コンポーザブルにアタッチします。
  3. イベント コールバック(onClick など)またはコルーチン スコープ内で requestFocus() を呼び出します。

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")
}

最初の画面のフォーカスを設定する

画面が最初に表示されたときに特定のコンポーネントに初期フォーカスを配置するには、LaunchedEffect(Unit) 内で requestFocus() をトリガーします。

LaunchedEffect(Unit) {
    focusRequester.requestFocus()
}

コンテナ間を移動したり、別の画面から戻ったりするときに、focusRestorer() を親コンテナにアタッチして、最後にフォーカスされた子に自動的にフォーカスを戻すこともできます。詳しくは、フォーカスを復元するガイドをご覧ください。