You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Roku是否内置焦点管理系统?焦点导航异常问题咨询

Roku 焦点机制核心说明与问题解决

一、Scenegraph 焦点管理核心逻辑

  • Roku 的焦点导航依赖容器组件的内置遍历规则,仅部分官方容器(如 GroupList、GridLayout、VerticalLayout)自带完整焦点切换能力,普通 Group 不会自动处理上下/左右焦点跳转。
  • 焦点激活规则:initialFocus 仅标记默认焦点候选,必须通过调用 m.top.setFocus(true) 才能触发焦点的实际挂载,这是Scenegraph的强制要求,并非异常。

二、你的场景问题解决

1. 垂直组件无法互相导航

如果使用普通 Group 包裹垂直排列的 ButtonGroup 或 Button,需手动配置容器的 navigation 属性定义焦点切换关系:

<Group id="mainContainer" navigation="[
  {down: buttonGroup2, up: buttonGroup1},
  {down: button2, up: button1}
]">
  <ButtonGroup id="buttonGroup1" />
  <ButtonGroup id="buttonGroup2" translation="[0, 100]" />
</Group>

更简便的方式是直接使用**VerticalLayout**容器,它内置垂直方向的焦点自动遍历能力,无需手动配置:

<VerticalLayout id="mainLayout" spacing="20">
  <ButtonGroup id="buttonGroup1" />
  <ButtonGroup id="buttonGroup2" />
</VerticalLayout>

2. 焦点初始化失效问题

  • 确保 initialFocus 指向的组件是当前容器的直接子元素,或属于可被容器遍历到的层级。
  • 在组件初始化完成后(如 init() 方法末尾)调用 m.top.setFocus(true),确保焦点被正确激活:
sub init()
  m.top.initialFocus = m.top.buttonGroup1
  m.top.setFocus(true)
end sub

三、避免自定义焦点管理的最佳实践

  • 优先使用Roku官方布局容器:VerticalLayout、HorizontalLayout、GridLayout、GroupList,这些容器均内置对应方向的焦点自动导航逻辑。
  • 若需自定义容器,可继承 LayoutGroup,通过其 navigation 属性批量配置焦点规则,无需从零实现完整的焦点遍历系统。

内容的提问来源于stack exchange,提问作者Bart

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 14:04:54