Garmin ConnectIQ应用程序以列表/菜单作为第一个视图

时间:2017-09-11 10:58:30

标签: garmin connectiq

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

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

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

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

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

(请注意我问的是观看应用 - 即按“选择”(右上角)并从列表中选择它即可达到的效果。不是小部件,请注意面部或数据字段。)

(编辑以澄清观看应用,并使用导航作为示例。)

1 个答案:

答案 0 :(得分:0)

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

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

应该注意的是,创建自己的菜单系统只能用于watch-app。对于监视面和数据字段,无法处理任何输入事件,并且对于小部件,在用第二个视图替换初始视图之前,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);
    }

}