ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

可变字重设成 450 却跳回 400:HarmonyOS 7 连续字重与设备级粗细怎么一起验

可变字重设成 450 却跳回 400:HarmonyOS 7 连续字重与设备级粗细怎么一起验 可变字重设成 450 却跳回 400HarmonyOS 7 连续字重与设备级粗细怎么一起验HarmonyOS 7 的设计动态明确提出支持多语言连续字重变化。落到 ArkUI 时开发者仍要区分两个开关是否允许非整百字重生效以及是否跟随设备的字体粗细级别。只写一个 450 并不能保证所有组件、字体和设备都显示成预期粗细。证据边界本文把华为官方资料、可执行的应用侧模型和待补的 API 26 设备证据分开记录。当前本机 SDK 为 API 24且没有连接 HarmonyOS 7 真机文中的 TypeScript 断言用于验证状态与边界不冒充 API 26 编译、云端联调或真机结果。接入时应以目标版本官方文档、控制台配置和真实错误码为准。复现450 为什么看起来和 400 一样官方 API 说明中enableVariableFontWeightfalse时非整百数值会回到默认 400开启后才允许 100 到 900 的任意整数参与可变字重。与此同时字体文件本身也要支持可变调节。案例一阅读页跟随系统粗细正文适合保留设备级字体粗细让低视力用户的系统设置能够生效。测试时要覆盖 400、450、600 等档位并检查换行是否变化。案例二品牌数字必须稳定金额、验证码或图表刻度若因为设备设置变粗后挤压布局可以明确关闭设备级字重跟随但仍要保证可读性和无障碍放大。先把配置决策写成函数type FontPolicy { variable: boolean; followDevice: boolean; requested: number }; function effective(p: FontPolicy): number { if (p.requested 100 || p.requested 900) return 400; if (!p.variable p.requested % 100 ! 0) return 400; return p.requested; } if (effective({ variable: false, followDevice: true, requested: 450 }) ! 400) throw new Error(非整百回退错误); if (effective({ variable: true, followDevice: true, requested: 450 }) ! 450) throw new Error(可变字重未生效);不只看“粗不粗”连续字重会影响字符宽度、行高观感和按钮文案空间。中文、英文、数字和不支持可变轴的备用字体都要分别看。动效过程中还要关注频繁重排不能为了视觉变化让长列表持续抖动。验收矩阵可变字重开启与关闭。设备字体粗细不同级别。中文、英文、数字和混排。支持与不支持可变字重的字体。手机、平板、电脑窗口缩放。官方资料1. HarmonyOS 设计语言与可变字体2. ArkUI 文本字体配置 API3. HarmonyOS 7 新能力一览
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进