【问题标题】:How to move focus between a keyboard and button group on a screen?如何在屏幕上的键盘和按钮组之间移动焦点?
【发布时间】:2017-11-01 13:20:59
【问题描述】:

因此,对于一个工作项目,我们的任务是为客户创建一个 Roku 应用程序。对不起,如果这是一个愚蠢的问题,但我从来没有接触过 Brightscript 或 Roku 开发,而且我主要是一名 react/javascript 开发人员。

我正在努力,现在我正在尝试创建一个场景图组件来显示一个键盘和一个显示在下面的 ButtonGroup。按钮组本质上是用于选择提交键盘文本字段中的内容,或取消输入。

到目前为止,我已经将组件渲染中的所有元素和焦点设置到了键盘上(这似乎是必要的,否则,仅通过遥控器上的上下键将无法选择键盘)。

但是,在键盘上导航时,我找不到将焦点移到按钮组的任何方法。基本上,如果我按下键盘底行的遥控器,它什么也不做。它永远不会将焦点向下移动到按钮组。

我只是希望有人可以帮助我解决这个问题。我知道答案可能很明显,但我只是想念它,但我整个上午都在努力解决这个问题,摆弄一些东西,但我似乎无法弄清楚。

下面是包含键盘和按钮组的组件示例。随意批评您认为我做得不好的其他任何事情,因为我再次对 Roku 开发人员一无所知。

<?xml version="1.0" encoding="utf-8" ?>
<!-- Copyright 2016 Roku Corp.  All Rights Reserved. -->
<component name="MemberEmail" extends="Group">

  <children>
    <LayoutGroup id="MemberEmailLayout" translation = "[ 0, 0 ]" itemSpacings="[20]">
      <Keyboard id="EmailKeyboard" />
      <ButtonGroup id="EmailButtonGroup" />
    </LayoutGroup>
  </children>
  <script type = "text/brightscript" >

    <![CDATA[

    sub init()
      m.parentNode = m.top.getParent()

      m.memberEmailLayout = m.top.findNode("MemberEmailLayout")
      m.emailKeyboard = m.top.findNode("EmailKeyboard")
      m.emailButtonGroup = m.top.findNode("EmailButtonGroup")

      m.emailButtonGroup.buttons = ["Submit", "Cancel"]
      m.emailButtonGroup.observeField("buttonSelected","buttonPressed")

      emailKeyboardRect = m.memberEmailLayout.boundingRect()
      emailKeyboardCenterX = (1920 - emailKeyboardRect.width) / 2
      emailKeyboardCenterY = (1080 - emailKeyboardRect.height) / 2
      m.memberEmailLayout.translation = [ emailKeyboardCenterX, emailKeyboardCenterY ]

    end sub

    sub buttonPressed()
      if m.emailButtonGroup.buttonSelected = 1 then
        print "SUBMIT BUTTON SELECTED"
        print "Input Value is"; m.emailKeyboard.text
        m.parentNode.currentStep = "password"
      else if m.emailButtonGroup.buttonSelected = 2 then
        print "CANCEL BUTTON SELECTED"
      end if
    end sub
    ]]>

  </script>

</component>

【问题讨论】:

    标签: roku brightscript


    【解决方案1】:

    您可能想阅读文档中的 onKeyEvent 函数。将此函数添加到您的组件中:

        function onKeyEvent(key as String, press as Boolean) as Boolean
            handled = false
    
            if press
                if key = "down" and not m.emailButtonGroup.hasFocus()
                    m.emailButtonGroup.setFocus(true)
                    handled = true
                else if key = "up" and not m.emailKeyboard.hasFocus()
                    m.emailKeyboard.setFocus(true)
                    handled = true
                end if
            end if
    
            return handled
        end function
    

    【讨论】:

    • 天哪,谢谢!我知道 onKeyEvent,因为我在其他地方使用它,但是在这个组件的情况下,我认为它会触发“向下”和“向上”,即使在键盘字符或按钮组按钮上移动时也会触发“向下”和“向上”。看到它在运动中,完全了解它现在是如何工作的。再次非常感谢您的快速回复和正确答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-07
    • 2016-04-07
    • 1970-01-01
    • 2018-06-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多