0

如何将手表应用的第一个视图设置为菜单或类似的滚动列表?

我一直在 Fenix 5 上看到这种行为;例如,在导航应用程序中(按“选择”,选择“导航”),第一个屏幕是选项的滚动列表。我希望在我的应用程序中使用相同的内容,并以编程方式创建和控制列表。

但是,从 getInitialView() 返回菜单会给我“意外类型错误”。

澄清一下:我真的不在乎它是否真的是一个菜单。但我希望能够一次看到列表中的多个项目,如果列表大于屏幕,则让向上和向下按钮滚动它。让项目成为我可以以编程方式绘制的自定义视图将是一个很大的优势。

我想我可以手动绘制列表,并手动实现平滑滚动;但这太乏味了。我必须相信有一个内置的设施,因为我看到这个确切的事情在很多地方一直发生。

(请注意,我询问的是手表应用程序- 即您可以通过按“选择”(右上角)并从列表中选择它来获得。不是小部件、表盘或数据字段。)

(编辑以澄清手表应用程序,并以导航为例。)

4

1 回答 1

0

不幸的是,您无法将应用程序的第一个视图(无论应用程序类型如何)设置为菜单。CIQ 框架期望调用 getInitialView() 函数将返回一个数组,其中第一个元素是 View 类型的对象。如果您使用对菜单的内置支持,您将收到错误消息。

相反,您必须创建自己的“视图”来呈现菜单(您手动显示),然后使用您自己的 InputDelegate 对象手动处理向上/向下输入。

应该注意的是,创建您自己的菜单系统仅适用于手表应用程序。对于表盘和数据字段,无法处理任何输入事件,而对于小部件,您的 InputDelegate 对象将不会收到任何 UP 或 DOWN 事件,直到您将初始视图替换为第二个视图。当您在小部件上呈现第二个视图时,通常在用户按下开始按钮后,您的 InputDelegate 对象将接收所有事件。

另一种选择是在初始视图上呈现应用程序标题和/或典型信息,并设置一个计时器以在呈现初始屏幕后一秒左右推送一个新视图(这将是您的菜单)。此选项将使您能够使用内置菜单功能,从而降低代码复杂性,如果您计划支持具有不同大小和样式的多个设备,这尤其好。

我还没有运行代码,但是对于您的初始视图,这样的东西应该可以工作:

class SomeView extends Ui.View {

    var startupTimer;
    var isFirstTime = true;

    function initialize(ident,page) {
        startupTime = new Timer.Timer();
    }

    function onShow() {
        if (isFirstTime) {
            isFirstTime = false;
            startupTimer.start( method(:startupTimerCallback), 1000,  false );
        }
    }

    function onUpdate(dc) {
        if (isFirstTime) {
            // render the startup view (title, version, etc) here...
        }
    }


    function startupTimerCallback() {
        Ui.pushView(new Rez.Menus.MainMenu(), new MainMenuInputDelegate(), Ui.SLIDE_LEFT);
    }

}
于 2017-09-12T22:02:28.030 回答