3

connectIQ API 是否有可能检查手表是圆形还是方形?

我的应用程序正在为计时器绘制进度条,如果我找到一种方法来确定屏幕是圆形还是方形,我可以让它通用

4

3 回答 3

4

该类Toybox::System::DeviceSettings有方法screenShape()

具有以下可能的返回值:

  • SCREEN_SHAPE_ROUND = 1
  • SCREEN_SHAPE_SEMI_ROUND = 2
  • SCREEN_SHAPE_RECTANGLE = 3
于 2016-11-04T08:19:04.073 回答
2

可以使用资源编译器为不同的屏幕几何图形指定资源。这可以用来识别应用程序正在哪个设备上运行。

在您的项目中,通过在项目的根目录中创建特定于设备的目录(例如resources-vivoactiveresources-fenix3),为您打算支持的每个设备指定一组唯一的资源(包括字符串、图像和菜单等))。

接下来,在每个设备的资源目录中的resources.xml文件中创建一个字符串资源,用于指定设备类型:

<resources>
    <bitmap id="LauncherIcon" filename="images/launcher_icon.png" />
    <string id="AppName">MyApp</string>
    <string id="deviceType">vivoactive</string>
</resources>

当应用程序启动时,做一个简单的检查来获取运行应用程序的设备:

function onStart() {
    deviceType = Ui.loadResource(Rez.Strings.deviceType);
}

然后,如果您需要为特定设备做一些独特的事情,请检查deviceType :

function drawProgressBar() {
    if (deviceType.equals("vivoactive")) {
        // Do vivoactive-specific stuff here
        ...
    }
}

如果您愿意,您可以稍微抽象一下,使用更通用的设备类型(如“圆形”、“方形”等)购买,这样您就不必编写逻辑来处理每个独特的设备模型。

于 2015-12-21T20:40:41.873 回答
1

似乎没有直接功能,但您始终可以检查表盘的宽度和高度:

dc.getWidth(), dc.getHeight()

如果它们相等,例如 218 像素,则您拥有Fenix 3并且显然是圆脸。如果它们是 205 像素 x 148 像素,那么您正在处理一个方形的vívoactive

也许写一个你可以从 onLayout 调用的函数:

function isRoundFace (dc) {
    return dc.getWidth() == dc.getHeight();
}
于 2015-10-02T20:05:52.860 回答