ユーザーがハードウェア キーボード、D-pad、ロータリー コントローラを使用して Compose UI を操作すると、テキスト フィールドは他のフォーカス ターゲットとともにフォーカス ナビゲーションに参加します。
デフォルトでは、テキスト フィールドにフォーカスが固定されません。ユーザーがテキスト フィールドから移動できるようにするために、カスタム キーイベント ハンドラ(onKeyEvent または onPreviewKeyEvent)を追加する必要はありません。ユーザーは、Shift+Tab を使用するか、方向キーでテキストの境界を越えて移動することで、いつでも終了できます。
KeyboardOptions を使用して、ハードウェア キーボード ナビゲーションと連携する直感的なソフトウェア キーボード アクションを提供できます。たとえば、ImeAction.Next はフォーカスを次のフォーカス ターゲットに移動します。
1 次元のフォーカス走査
1 次元フォーカス走査では、Tab キーの動作は、テキスト フィールドに構成された lineLimits によって異なります。
- 1 行のテキスト フィールド(
TextFieldLineLimits.SingleLine) Tab キーを押すと、フォーカスが UI の次のフォーカス ターゲットに移動します。 - 複数行のテキスト フィールド(
TextFieldLineLimits.MultiLine()またはデフォルト): Tab キーを押すと、フォーカスが移動する代わりに、テキスト バッファにタブ文字(\t)が挿入されます。 - 逆ナビゲーション(Shift+Tab): Shift+Tab キーを押すと、単一行と複数行のテキスト フィールドの両方で、フォーカスが前のフォーカス ターゲットに無条件で戻ります。
// Single-line text field: Tab advances focus to the next focus target BasicTextField( state = singleLineState, lineLimits = TextFieldLineLimits.SingleLine, modifier = Modifier.fillMaxWidth() ) // Multi-line text field: Tab inserts '\t'; Shift + Tab moves to previous target BasicTextField( state = multiLineState, lineLimits = TextFieldLineLimits.MultiLine(), modifier = Modifier.fillMaxWidth() )
2 次元フォーカス走査
矢印キー(または D-pad)を使用すると、まず方向キーでテキスト フィールド内のテキスト カーソル(キャレット)が移動します。
- 縦方向のナビゲーション(上下):
Downキーを押すと、カーソルが 1 行ずつ下に移動します。キャレットが最終行に達したときに、下キーをもう一度押すと、フォーカスがテキスト フィールドの下にある隣接するフォーカス ターゲットに移動します。最初の行で上キーを押すと、フォーカスが前のフォーカス ターゲットに移動します。 - 水平ナビゲーション(左 / 右 / 開始 / 終了): 水平方向の矢印キーを押すと、カーソルが文字間を移動します。カレットがテキスト バッファの先頭または末尾に達したときに、方向キーをもう一度押すと、その方向の隣接するフォーカス ターゲットにフォーカスが移動します。
Android TV のテキスト フィールド
Android TV で、物理キーボードを使用せずに D-pad コントローラを使用する場合:
- テキスト フィールドにフォーカスを移動すると、画面上のソフトウェア キーボードが自動的に表示されます。
- ユーザーが D-pad を使用してソフトウェア キーボードのキーを操作します。
- [戻る] ボタンを押すと、テキスト フィールドのフォーカスを維持したまま、ソフトウェア キーボードが閉じます。
- ソフトウェア キーボードが閉じられると、D-pad の方向キーを押すと、画面上の隣接するフォーカス ターゲットにフォーカスが移動します。
- [戻る] ボタンを 2 回押すと、標準のシステムの戻るナビゲーションがトリガーされます。
あなたへのおすすめ
- 注: JavaScript がオフになっている場合はリンクテキストが表示されます
- フォーカス ターゲット
- フォーカス移動順序
- フォーカス ターゲットをグループ化する
- フォーカス ナビゲーションをテストする