为 Roku 创建日期输入页面?

Creating a page for date entry for Roku?

我正在开发 Roku 应用程序,我们需要用户的出生日期。尽量不要在解析端变得太复杂(所以宁愿不只是有一个文本框,用户可以在其中输入他们想要的任何内容)。我研究过使用 roPinEntryDialog,但不幸的是,我认为这仅适用于输入付款信息。我看到 roDateTime 是一回事,但它似乎只能获取当前日期,并且没有任何类型的输入。

有什么想法或帮助吗?

谢谢!

您可以做什么取决于您编写的是应用程序 SDK1(现在已弃用的较旧但简单的组件)还是 RSG(Roku 场景图 - 更新、更复杂的实现方式)样式。

如果使用RSG,我会认为LabelList is a good start to implement something akin to iOS's UIDatePicker。例如。使用远程 Up-Down 用户选择月份,然后按向右移动到日期列,然后向右移动到年份列表。

我最终使用的解决方案是使用常规文本键盘,并使用正则表达式验证输入:

getText: function(ageValidate as Boolean, defaultText as String, displayText as String) as String
        screen = CreateObject("roKeyboardScreen")
        port = CreateObject("roMessagePort")

        screen.SetMessagePort(port)
        screen.SetDisplayText(displayText)
        screen.SetText(defaultText)
        screen.SetMaxLength(100)
        screen.AddButton(1, "done")
        screen.AddButton(2, "back")
        screen.Show()

        while true
            msg = wait(0, screen.GetMessagePort())
            if type(msg) = "roKeyboardScreenEvent"
                if msg.isScreenClosed()
                    return ""
                else if msg.isButtonPressed() then
                    if ageValidate = true AND m.isValidDate(text) = false then
                            "Invalid Input", "Input your birthdate in the format MMDDYYYY", "okay")
                        else if text = invalid OR text = ""
                            showUserDialog("Error"), "no input", "okay")
                        else
                            screen.Close()
                            return text
                        end if
                    else if msg.GetIndex() = 2
                        screen.Close()
                        return ""
                    end if
                end if
            end if
        end while
end function

isValidDate: function(date as String) as Boolean
    return CreateObject("roRegex", "(0[1-9]|1[012])[-.]?(0[1-9]|[12][0-9]|3[01])[-.]?(19|20)[0-9]{2}", "i").IsMatch(date)
end function