Skip to content

显示环境 $env ​

$env 描述“这张卡片现在怎样显示”,不包含车辆读数。需要根据尺寸、明暗主题或 HUD 改变布局时,从这里读取。

字段类型用途
width数字,逻辑点当前可用绘图宽度
height数字,逻辑点当前可用绘图高度
dark布尔值是否使用深色外观
foreground颜色字符串适合当前外观的前景色
accent颜色字符串建议的强调色
mode"instruments" 或 "hud"仪表模式或 HUD 模式
reduceMotion布尔值系统是否开启减弱动态效果

尺寸是点,不是像素 ​

不要把 width 乘以手机的屏幕缩放倍数。x/y、字号、描边、地图偏移等使用相同的逻辑点单位。

jsx
function main() {
  const diameter = Math.max(0, Math.min($env.width, $env.height) - 36);
  return <Circle width={diameter} height={diameter}
    fill="clear" stroke={$env.accent} lineWidth={3}/>;
}

小卡片、横屏和不同容器会提供不同尺寸。普通节点里的 "fill" 表示填充当前父容器提议的尺寸,未必是整个屏幕。

跟随主题 ​

jsx
const primary = $env.foreground;
const accent = $env.accent;
const secondary = $env.dark ? '#FFFFFF99' : '#12171C99';

建议先使用环境颜色,再为特定内容增加少量固定颜色。把黑色文字写死在透明背景上,在深色模式里很容易看不清。

根据展示方式调整内容 ​

jsx
function main() {
  const hud = $env.mode === 'hud';
  return <Text fontSize={hud ? 72 : 56}
    fontWeight={hud ? 'semibold' : 'light'}
    color={$env.foreground}>
    {$data.current.speed === null ? '—' : Math.round($data.current.speed)}
  </Text>;
}

mode 表示展示方式,不等于 HDR 是否开启。没有 $env.hdr 或 $env.preview 这样的公开字段;不要依赖它们判断增强亮度或预览状态。

减弱动态效果 ​

原生动画会遵循减弱动态效果。若自己的计算也需要区别处理,可读取 reduceMotion,例如在低动态设计中减少装饰元素或降低视觉变化。

静态缩略图与减弱动态效果场景会显示普通属性值,因此为每个动画节点设置合理的基础值很重要。