build 表达式

WFF 使用表达式语言来实现以下功能:

  • 使用 TransformGyro 转换外观
  • 通过 Condition 语句实现条件行为
  • Template 元素中的字符串格式设置

表达式语言是一种脚本语言,其中包含常用的运算符和一系列可使用的函数。

表达式可以使用数据源(用方括号表示),以便您对外部输入做出反应,例如当前日期和时间、健康和健身指标,甚至天气。

使用表达式时,TransformTemplateCondition 的主要区别在于,TransformTemplate 要求表达式的结果为(例如,封装元素的新位置),而 Condition 要求表达式的结果为布尔值

Condition 元素中使用时,请将表达式指定为文本元素。将表达式封装在 CDATA 元素中,以避免需要使用实体引用(例如 "&)。

<![CDATA[[DAY_OF_WEEK] == 6 || [DAY_OF_WEEK] == 7]]>

此表达式会评估为布尔值,并使用 DAY_OF_WEEK 数据源确定是否为周末。

系统还支持函数,例如,以下表达式基于 Wear OS 设备加速度计的 x-value,用于在任一方向上将某个值旋转最多 5 度:

(5.0/90.0)*clamp([ACCELEROMETER_ANGLE_X],0,90) +
(-5.0/90.0)*clamp([ACCELEROMETER_ANGLE_X],-90,0)

clamp() 函数可将值限制在两个边界之间。

表达式重新评估

表达式的重新评估频率取决于其中使用的数据源。例如,[DAY_OF_WEEK] == 6 || [DAY_OF_WEEK] == 7 表达式仅在新的一天开始时重新求值。不过,使用 [SECOND] 数据源的表达式每秒都会重新评估一次。

重新评估可能会导致场景重新计算和重新渲染,具体取决于表达式结果的变化。因此,请务必始终使用重新评估频率尽可能低的数据源。例如,如需确定是否为下午,请执行以下操作:

<!-- BAD: Re-evaluates every second -->
[SECONDS_IN_DAY] > 43200

<!-- Good: Minimizes re-evaluation (1 = PM, 0 = AM) -->
[AMPM_STATE] == 1

表达式中的配置值

除了函数和数据源之外,还可以使用配置值。例如,如果在 UserConfigurations 中定义了名为 showBackgroundInAfternoonBooleanConfiguration,则可以在表达式中使用该 BooleanConfiguration

<![CDATA[[CONFIGURATION.showBackgroundInAfternoon] == "TRUE" && [AMPM_STATE] == 1]]>