tabStop 是专门用于容器组件的属性。它的作用是:让焦点可以 “停在容器本身”,而不是直接穿透进子组件。
只有设置了 tabStop(true) 的容器,才能成为焦点停留节点,实现 “先选中容器 → 再进入内部” 的分层走焦逻辑。

tabStop 只对容器生效,且容器内必须有可获焦子组件。
容器设置 tabStop 后,requestFocus() 可让焦点停留在容器上。
tabStop 容器嵌套不能超过 2 层。
不建议根容器设置 tabStop,会导致 Enter / ESC 逻辑异常。

按键行为:

Tab / 方向键:
焦点只会停在配置 tabStop 的容器上;在容器内部时,可在子可焦组件间游走;走到末尾自动跳出容器,切换到外部下一个容器。

Enter 键:
焦点停在容器外层 → 按 Enter,直接切入容器内部第一个可获焦子组件。

ESC 键:
焦点在子组件 → 按 ESC,退回上一层带 tabStop 的容器,最高不超出当前页面根容器。

空格键:
焦点停在 tabStop 容器上时,可直接触发容器的 onClick 点击事件。

对于以下节点结构

┌────────────────────────────┐
│ PageRoot 根容器(不配置 tabStop) │
└────────────────────────────┘

┌─────────────────────┐
│ 容器A tabStop=true │
├─────────────────────┤
│ 子按钮 A1 │
│ 子按钮 A2 │
└─────────────────────┘

┌─────────────────────┐
│ 容器B tabStop=true │
├─────────────────────┤
│ 子按钮 B1 │
└─────────────────────┘

┌─────────────────────┐
│ 容器C 无 tabStop │
├─────────────────────┤
│ 子按钮 C1 │
└─────────────────────┘

焦点走向:

  1. Tab / 方向键 → 停靠容器外层
    外部普通节点
    ↓ Tab/方向键
    ┌─────────────────────┐
    │ 容器A tabStop=true │
    └─────────────────────┘
    焦点停在容器本身,不自动进到 A1/A2

  2. 按下 Enter → 切入内部首个子组件
    ┌─────────────────────┐
    │ 容器A 焦点停靠中 │
    └─────────────────────┘
    ↓ Enter
    ┌─────────────────────┐
    │ 子按钮 A1(可焦) │
    └─────────────────────┘

  3. 内部走完 → 自动跳出容器
    A1 → A2 连续走焦,到末尾再按 Tab / 方向键:自动离开容器 A,跳转到下一个 tabStop 容器 B。

  4. 按下 ESC → 退回上层停靠容器
    ┌─────────────────────┐
    │ 子按钮 A1 / A2 │
    └─────────────────────┘
    ↓ ESC
    ┌─────────────────────┐
    │ 容器A tabStop=true │
    └─────────────────────┘

  5. 无 tabStop 容器:直接穿透不停留
    外部普通节点
    ↓ 走焦
    ┌─────────────────────┐
    │ 容器C 无 tabStop │
    └─────────────────────┘
    ↓ 直接穿透
    ┌─────────────────────┐
    │ 子按钮 C1(可焦) │
    └─────────────────────┘

容器 C 无法留住焦点,焦点直接落到子按钮

通过 requestFocus 请求焦点:
如果是容器组件 + 配置 tabStop=true:焦点能稳稳停在容器本体上;
如果容器没配 tabStop:哪怕整条页面焦点链里、别的地方有无数 tabStop 容器,这个无 tabStop 的容器,照样能直接拿到焦点、穿透下去。

场景结构:

执行 requestFocus(容器C)

┌─────────────────────┐
│ 容器C 无 tabStop │ ← 无视全局tabStop,直接抢占焦点链路
└─────────────────────┘
↓ 自动穿透
┌─────────────────────┐
│ 焦点落到子按钮 C1 │
└─────────────────────┘

Logo

社区规范:仅讨论OpenHarmony相关问题。

更多推荐