【问题标题】:Creating a page for date entry for Roku?为 Roku 创建日期输入页面?
【发布时间】:2017-07-28 11:26:23
【问题描述】:

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

有什么想法或帮助吗?

谢谢!

【问题讨论】:

  • 我建议在 Roku 自己的开发者中发布问题。论坛(forums.roku.com/viewforum.php?f=34),以增加关注/回答的机会
  • @NasBanov 谢谢,会的
  • 我也有同样的需求,最终实现了@nas-banov 上面提到的建议,使用 3 个并行标签列表。我将源代码发布在:github.com/lvcabral/SGDatePicker

标签: roku brightscript


【解决方案1】:

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

如果使用 RSG,我认为LabelList 是实现类似于 iOS 的UIDatePicker 的一个好的开始。例如。远程 Up-Down 用户选择月份,然后按 Right 移动到日期列,然后按 Right 移动到年份列表。

【讨论】:

    【解决方案2】:

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

    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
    

    【讨论】:

      猜你喜欢
      • 2021-10-15
      • 2016-07-23
      • 2014-04-07
      • 1970-01-01
      • 1970-01-01
      • 2016-06-09
      • 1970-01-01
      • 2019-10-11
      • 1970-01-01
      相关资源
      最近更新 更多