聚焦于文本字段

当用户使用硬件键盘、方向键或旋转控制器浏览 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()
)

二维焦点遍历

使用箭头键(或 D-pad)时,方向键首先会在文本字段内移动文本光标(插入符号):

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

Android TV 上的文本字段

在 Android TV 上,使用没有实体键盘的方向键控制器:

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