Roku:如何在BrightScript中读取键盘输入的文本?

时间:2016-07-08 06:42:10

标签: roku brightscript

我正在为Roku编写一个应用程序,我需要使用键盘输入一些文本并获取main.brs中的文本

我从这里给出的KeyboardExample开始:https://sdkdocs.roku.com/display/sdkdoc/Widgets+Markup(键盘标记)。

要将文本传递给main.brs,我使用了roSGScreen的全局节点,如下面的链接所示。 https://sdkdocs.roku.com/display/sdkdoc/Scene+Graph+Data+Scoping(全球范围)。

以下代码出现在我的main.brs

Sub getTextFromUser()
    screen = CreateObject("roSGScreen")
    m.textPort = CreateObject("roMessagePort") 
    screen.setMessagePort(m.textPort)
    m.global = screen.getGlobalNode()
    m.global.id = "GlobalNode"
    m.global.addFields( {myText: "Not initialized"} )
    scene = screen.CreateScene("KeyboardExample")
    screen.show()
    while(true)
        msg = wait(0, m.textPort)
        msgType = type(msg)

       if msgType = "roSGScreenEvent"
           if msg.isScreenClosed()
               myURL = m.global.myText
               return
           end if
       end if
  end while
End Sub

我在keyboard.xml中添加了以下代码

function onKeyEvent(key as String, press as Boolean) as Boolean 
    keyboard = m.top.findNode("exampleKeyboard")  

    if keyboard.text <> invalid 
        m.global.myText= keyboard.text
    end if

    return false 
end function

当我收到 roSGScreenEvent.isScreenClosed 事件时,我正在将 m.global.myText 复制到本地变量。

问题是当 roSGScreenEvent.isScreenClosed 被接收时 m.global.myText 变为无效。

有人可以告诉我这里出了什么问题吗?

更新 我在以下链接中阅读了 roSGNode.ObserveField https://sdkdocs.roku.com/display/sdkdoc/Handling+Node+Field+Changes

我为&#34; text &#34;添加了观察者键盘的字段如下。

keyboard.ObserveField("text", "changetext")

每当按下一个键时,我都会收到changetext()回调。但是这种方法也存在同样的问题。

根据上面的链接,可以将 roMessagePort 对象传递给函数指针的观察者instread。所以我使用 global 变量将 textPort 传递给 keyboard.xml ,并将其传递给observer,如下所示。

keyboard.ObserveField("text", m.global.myTextPort)

我的期望是每当按下一个键时,在 textPort 上获取 roSGNodeEvent 。但我没有得到任何事件。

1 个答案:

答案 0 :(得分:0)

全局节点在一个Rosgscreen的节点之间共享,如果屏幕关闭,则无法访问它的字段。因此,每次输入文本时,您都必须观察键盘文本并更新局部变量myurl。