如何将我的手表应用程序的第一个视图设置为菜单或类似的滚动列表?
我一直在Fenix 5上看到这种行为;例如,在导航应用程序中(按“选择”,选择“导航”),第一个屏幕是滚动选项列表。我想在我的应用程序中做同样的事情,通过编程方式创建和控制列表。
但是,从getInitialView()返回菜单会给出“意外类型错误”。
我只想澄清一下:我并不在乎它是否真的是菜单。但是我希望能够同时看到列表中的多个项目,如果列表比屏幕大,就让上下按钮滚动它。让项目是我可以编程绘制的自定义视图将是一个很大的好处。
我想我可以手动绘制列表,并手动实现平滑滚动;但这太繁琐了。我不得不相信,这里有一个内置的设施,因为我看到在很多地方都有这样的事情发生。
(请注意,我询问的是手表应用程序 --也就是通过按下"select“(右上)并从列表中选择它来实现的。而不是小部件、监视面板或数据字段。)
(编辑以澄清观看应用程序,并以导航为例)
发布于 2017-09-12 22:02:28
不幸的是,您不能将应用程序的第一个视图(不管应用程序类型)设置为菜单。CIQ框架期望对getInitialView()函数的调用将返回一个数组,其中第一个元素是类型为View的对象。如果您使用内置的菜单支持,您将收到错误。
相反,您必须创建自己的“视图”,该视图呈现菜单(手动显示),然后使用自己的InputDelegate对象手动处理上/下输入。
应该注意的是,创建自己的菜单系统只适用于手表应用程序。使用watch faces和data字段,无法处理任何输入事件,使用小部件,在用第二个视图替换初始视图之前,您的InputDelegate对象不会接收任何向上或向下的事件。当您在小部件上呈现第二个视图时,通常是在用户按下“开始”按钮之后,您的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);
}
}https://stackoverflow.com/questions/46154073
复制相似问题