聚焦于文本字段

当用户使用实体键盘、方向键或旋控器在 Compose 界面中导航时,文本字段会与其他焦点目标一起参与焦点导航。

默认情况下,焦点不会被困在文本字段中。您无需添加自定义按键事件处理脚本(onKeyEvent 或 onPreviewKeyEvent)来允许用户离开文本字段。用户始终可以使用 Shift+Tab 或使用方向键导航到文本边界之外来退出。

KeyboardOptions 可用于提供与硬件键盘导航相协调的直观软件键盘操作。例如,ImeAction.Next 会将焦点移至下一个焦点目标。

一维焦点遍历

在一维焦点遍历中,Tab 键的行为取决于在文本字段中配置的 lineLimits:

  • 单行文本字段 (TextFieldLineLimits.SingleLine) 按 Tab 键会将焦点移到界面中的下一个焦点目标。
  • 多行文本字段(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()
)

二维焦点遍历

使用箭头键(或方向键)时,方向键会先在文本字段中移动文本光标:

  • 垂直导航(向上 / 向下): 按 Down 键可将光标逐行向下移动。 当光标到达最后一行时,再次按向下键会将焦点转移到文本字段下方相邻的焦点目标。 在第一行按向上键会将焦点移至上一个焦点目标。
  • 水平导航(左 / 右 / 开头 / 结尾):按水平箭头键可让光标在字符之间移动。当光标到达文本缓冲区的开头或结尾时,再次按方向键会将焦点转移到该方向上的相邻焦点目标。

Android TV 上的文本字段

在 Android TV 上,使用方向键控制器(不使用实体键盘):

  1. 将焦点移至文本字段会自动显示屏幕软件键盘。
  2. 用户使用方向键浏览软件键盘的按键。
  3. 按返回按钮会关闭软件键盘,同时保持对文本字段的焦点。
  4. 软件键盘关闭后,按方向键会将焦点移至屏幕上的相邻焦点目标。
  5. 再次按下返回按钮会触发标准系统返回导航。