フォーカスを移動してクリア

FocusManager を使用すると、フォーカスを方向的に移動したり、完全にクリアしたりできます。コンポーネントを直接ターゲットにするには、FocusRequester を使用します(プログラムでフォーカスをリクエストするを参照)。

FocusManager を使用した方向フォーカス移動

相対的な方向にプログラムでフォーカスを移動するには:

  1. LocalFocusManager.current を使用して FocusManager インスタンスを取得します。
  2. FocusDirection 値(Next、Previous、Up、Down、Left、Right、Enter、Exit)を使用して moveFocus() を呼び出します。

val focusManager = LocalFocusManager.current

Button(
    onClick = {
        focusManager.moveFocus(FocusDirection.Next)
    }
) {
    Text("Next Field")
}

フォーカスをクリア

現在フォーカスされている要素からフォーカスを削除するには(ユーザーが Esc キーを押した場合など)、clearFocus() を呼び出します。

val focusManager = LocalFocusManager.current

Box(
    modifier = Modifier.onPreviewKeyEvent { keyEvent ->
        if (keyEvent.key == Key.Escape && keyEvent.type == KeyEventType.KeyUp) {
            focusManager.clearFocus()
            true
        } else {
            false
        }
    }
)

clearFocus() 関数は、省略可能な force: Boolean = false パラメータを受け取ります。

  • force = false(デフォルト): フォーカス ロックを尊重し、アクティブなコンポーネントがフォーカスをキャプチャしている場合はフォーカスをクリアしません。
  • force = true: コンポーネントがフォーカスをキャプチャしている場合でも、無条件でフォーカスをクリアします。