如何在屏幕上的键盘和按钮组之间移动焦点?

时间:2017-05-31 16:13:58

标签: roku brightscript

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

我正在插手,现在我正在尝试创建一个场景图组件来显示一个键盘,以及一个显示在下面的ButtonGroup。按钮组主要用于选择提交键盘文本字段中的内容,或取消输入。

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

然而,当在键盘周围导航时,我找不到任何方法将焦点移动到按钮组。基本上,如果我按下键盘底行的遥控器,它什么都不做。它永远不会将焦点移动到buttongroup。

我只是希望有人可以帮我解决这个问题。我知道答案可能是显而易见的,我只是错过了,但是我整个上午都在反对这个问题,摆弄一些事情,我似乎无法弄明白。

下面是一个包含键盘和按钮组件的示例。随意批评你看到的任何其他事情我也做得很糟糕,再说一遍,我对Roku dev没有真正的线索。

<?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>

1 个答案:

答案 0 :(得分:6)

您可能需要阅读文档中的 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