ユーザーがハードウェア キーボード、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 キーを押すと、1 行のテキスト フィールドと複数行のテキスト フィールドの両方で、フォーカスが前のフォーカス ターゲットに無条件で戻ります。
// 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 がオフになっている場合はリンクテキストが表示されます
- フォーカス ターゲット
- フォーカス移動順序
- フォーカス ターゲットをグループ化する
- フォーカス ナビゲーションをテストする