鸿蒙实战:字体令牌系统——AppFonts 与排版规范

发布时间:2026/8/27 19:11:31

鸿蒙实战:字体令牌系统——AppFonts 与排版规范
鸿蒙实战字体令牌系统——AppFonts 与排版规范前言必读图鸿蒙实战字体令牌系统——AppFonts 与排版规范第 68 篇 运行效果截图HarmonyOS NEXT一致的排版系统是设计质量的标志。鸿蒙应用开发中字号fp、圆角radius、间距padding、阴影shadow这四个维度如果有各自独立的散落定义页面之间会出现肉眼可见的不协调。本文将详细讲解本项目的四维一体的排版令牌系统。图AppFonts 四维令牌体系——字号/圆角/间距/阴影的统一管理结构AppFonts 排版系统字号 size圆角 radius间距 spacingAppShadow 阴影系统阴影层级xs: 10fpsm: 12fpmd: 14fplg: 16fpxl: 20fpxxl: 28fpsm: 8vpmd: 12vplg: 20vpfull: 999vpxs: 4vpsm: 8vpmd: 16vplg: 24vp一、四维令牌全景本项目的排版系统由四个令牌类组成定义在同一个文件中// 文件common/theme/AppFonts.ets//// 维度 类名 管理内容// ─────────────────────────────────────// 字体 AppFonts 字号阶梯 字重 字体族// 圆角 AppRadius 6 级圆角系统// 间距 AppSpacing 7 级间距系统// 阴影 AppShadow 7 级阴影系统二、AppFonts字号阶梯2.1 完整定义exportclassAppFonts{// 字体族staticreadonlySANS:stringHarmonyOS Sans SC, HarmonyOS SansstaticreadonlySERIF:stringHarmonyOS Sans SC, Source Han Serif CN// 字号阶梯fp · 跟随系统字号缩放staticreadonlyDISPLAY:number32// 大标题staticreadonlyTITLE_L:number28// HarmonyOS 大标题栏staticreadonlyTITLE:number22// 页面标题staticreadonlySUBTITLE:number18// 子标题staticreadonlyBODY_L:number16// 正文大staticreadonlyBODY:number14// 正文staticreadonlyCAPTION:number12// 辅助文staticreadonlyTINY:number10// 标签// 字重staticreadonlyW_REGULAR:FontWeightFontWeight.RegularstaticreadonlyW_MEDIUM:FontWeightFontWeight.MediumstaticreadonlyW_BOLD:FontWeightFontWeight.Bold}2.2 字号阶梯对照32 fp ─ DISPLAY 首页品牌名「鹿鹿·笔迹心理」 28 fp ─ TITLE_L HarmonyOS 大标题栏标题 22 fp ─ TITLE 页面标题「笔迹分析报告」 18 fp ─ SUBTITLE 卡片子标题、雷达图数字 16 fp ─ BODY_L 段落正文分享文案 14 fp ─ BODY 常规正文 12 fp ─ CAPTION 辅助说明、标签、时间戳 10 fp ─ TINY 元数据标签、版权信息2.3 字体族策略// 无衬线体正文/按钮staticreadonlySANS:stringHarmonyOS Sans SC, HarmonyOS Sans// 1. 优先 HarmonyOS Sans SC中文字体// 2. 降级 HarmonyOS Sans英文字体// 衬线体品牌/标题/引用staticreadonlySERIF:stringHarmonyOS Sans SC, Source Han Serif CN// 1. 优先 HarmonyOS Sans SCHarmonyOS 系统字体// 2. 降级 Source Han Serif CN思源宋体选择思源宋体作为降级字体而非默认的衬线体是因为本项目的定位是「手写 治愈风」思源宋体的笔触比标准衬线体更具温度感。三、AppRadius圆角系统3.1 完整定义exportclassAppRadius{staticreadonlyXS:number6// 最小圆角staticreadonlyS:number10// 小卡片/头像staticreadonlyM:number14// 按钮/普通卡片staticreadonlyL:number20// 大卡片/容器staticreadonlyXL:number24// 特圆卡片staticreadonlyROUND:number999// 胶囊按钮完全圆角}3.2 圆角应用场景ROUND → [ 分享 ] 胶囊按钮 border-radius: 999px XL → ┌──────────────┐ 特圆卡片TapSharePage 分享卡片 │ │ L → ┌──────────┐ 大容器卡片标签式 AI 摘要框 │ │ M → [ 拍照 ] 默认按钮 常规按钮 S → (头像) 小卡片 小卡片/标签 XS → ┌──────────┐ 最小圆角强调框 │ │3.3 圆角设计原则递增阶梯6 → 10 → 14 → 20 → 24 → 999 XS S M L XL ROUND 原则每次增加约 40-60%肉眼可分辨。 确保相邻层级差异 ≥ 4px避免视觉模糊。四、AppSpacing间距系统4.1 完整定义exportclassAppSpacing{staticreadonlyXXS:number4// 极紧凑图标与文字的间隙staticreadonlyXS:number8// 紧凑标题与副标题的间距staticreadonlyS:number12// 稍紧凑标签之间的间距staticreadonlyM:number16// 常规卡片内 paddingstaticreadonlyL:number20// 稍宽松页面左右边距staticreadonlyXL:number28// 宽松模块间距staticreadonlyXXL:number36// 极宽松大模块间距}4.2 7 级间距使用规范距离 层级 使用位置 示例 ──────────────────────────────────────────────── 4px XXS 文字与图标间隙 title subtitle 8px XS 标题与副标题 HmTitleBar top/bottom 12px S 标签/按钮间距 情绪标签 gap 16px M 卡片内边距 padding: 16px 20px L 页面左右边距 padding(left/right: 20) 28px XL 大模块间距 首页欢迎区与 Hero 的 gap 36px XXL 最大间距 页面底部留白4.3 调用示例// 页面左右边距统一 20pxColumn().padding({left:AppSpacing.L,right:AppSpacing.L})// 标题与副标题间距 8pxText(标题).fontSize(AppFonts.TITLE)Text(副标题).margin({top:AppSpacing.XXS})// 情绪标签间距 12pxFlex({wrap:FlexWrap.Wrap,justifyContent:FlexAlign.Center}){ForEach(this.tags,(tag:string){Text(tag).margin({right:AppSpacing.S,bottom:AppSpacing.S})})}// 模块间距 28pxScroll(){Column({space:AppSpacing.XL}){WelcomeSection()HeroSection()RecentReports()InspireSection()}}五、跨页面排版一致性5.1 全应用统一 padding所有页面的左右边距都使用AppSpacing.L 20这是 HarmonyOS Design 推荐的页面标准边距safe area margin。// MetaServiceCard.etsColumn().padding({left:AppSpacing.L,right:AppSpacing.L})// CapturePage.etsColumn().padding({left:AppSpacing.L,right:AppSpacing.L})// ReportDetailPage.etsColumn().padding({left:AppSpacing.L,right:AppSpacing.L})5.2 卡片统一背景色// 所有卡片背景统一为 CARD #FFFCF7Column().backgroundColor(AppColors.CARD).borderRadius(AppRadius.XL)// 特圆// 或.borderRadius(AppRadius.L)// 大圆角5.3 排版一致性对比❌ 无令牌系统时 Page A: padding 16, fontSize 16, borderRadius 12 Page B: padding 24, fontSize 15, borderRadius 10 → 肉眼可见的不一致 ✅ 有令牌系统时 Page A: padding AppSpacing.L, fontSize AppFonts.BODY, borderRadius AppRadius.M Page B: padding AppSpacing.L, fontSize AppFonts.BODY, borderRadius AppRadius.M → 完美一致六、与 HarmonyOS Design 的一致性HarmonyOS 规范本项目令牌值大标题字号AppFonts.TITLE_L28fp正文字号AppFonts.BODY14fp辅助文字AppFonts.CAPTION12fp页面边距AppSpacing.L20px安全区横向AppSpacing.L20px标题字重AppFonts.W_MEDIUMMedium正文字重AppFonts.W_REGULARRegular七、工程管理规格表令牌类管理数量文件行数AppFonts10字号 8 字重 324 行AppRadius67 行AppSpacing78 行AppShadow730 行全部四个类加起来不到 80 行代码却管理了整个应用的所有排版变量。调用频次// 项目中部分引用统计基于 Grep 估算AppFonts.BODY→35次引用 最高频 AppSpacing.L→20次引用 二级高频 AppRadius.XL→12次引用 AppShadow.CARD→8次引用扩展建议// 如果需要支持动态字号系统字体缩放// 当前 fp 会跟随系统设置自动缩放无需额外代码// 如果需要支持多语言如英文版// 英文环境下建议替换字体族为staticreadonlySANS_EN:stringSF Pro Text, Helvetica Neue八、注意事项与常见问题8.1 开发注意事项在正式开发前建议按以下步骤完成环境准备与前置检查版本确认检查 DevEco Studio 与 SDK 版本确保满足目标 API Level 要求权限声明在module.json5的requestPermissions字段中提前声明所有需要的系统权限设备能力检查调用前验证设备是否支持目标能力相机、NFC、传感器等异步封装所有耗时操作数据库、文件 I/O、网络请求统一使用async/await处理资源释放在组件aboutToDisappear()生命周期钩子中及时释放系统资源防止内存泄漏8.2 常见错误与解决方案常见问题快速排查表问题类型排查方向参考方法应用崩溃查看 hilog 错误日志hilog.error(TAG, ..., e.message)状态丢失检查 AppStorage 键名拼写统一使用常量管理键名动画不流畅避免在 animateTo 回调中执行 I/O动画与数据操作分离总结✅四维令牌系统AppFonts / AppRadius / AppSpacing / AppShadow 统一管理✅8 级字号阶梯从 10fp 到 32fp覆盖全场景✅6 级圆角系统XS → ROUND 递增体系✅7 级间距系统4px → 36px 覆盖所有间距需求✅字体族策略HarmonyOS Sans SC 优先 思源宋体降级✅跨页面一致性所有页面统一 padding / borderRadius / fontSize✅HarmonyOS Design 兼容大标题 28fp、边距 20px 等符合规范下一篇将讲解线性渐变与梯度色彩应用看 HomePage 的 Hero CTA 渐变和情绪渐变条的实现。 收藏提示排版令牌是设计系统的骨架项目初期就建立它能避免 80% 的排版不一致问题。如果这篇文章对你有帮助欢迎点赞、收藏⭐、关注你的支持是我持续创作的动力相关资源字体资源管理Typography 排版规范设计令牌系统第67篇 颜色体系第69篇 渐变色彩第70篇 阴影系统第99篇 设计模式回顾自定义字体加载七、排版令牌应用进阶7.1 响应式字号策略鸿蒙支持通过fp单位自动适配用户的系统字号偏好设置令牌中所有字号均已使用fp// ✅ 使用 fp响应系统字号偏好Text(标题).fontSize(AppFonts.sizeXl)// 20fp// ❌ 使用 vp不响应系统字号偏好Text(标题).fontSize(20)// 20vp固定不变7.2 间距令牌的网格系统间距令牌基于4dp 网格所有值均为 4 的倍数令牌值用途场景spacingXs4vp图标与文字内间距spacingSm8vp组件内部间距spacingMd16vp卡片内边距spacingLg24vp页面边距spacingXl32vp页面区块间距7.3 圆角令牌与品牌感知圆角大小影响品牌形象直角0vp专业、严肃、科技感小圆角8vp友好、现代、克制大圆角20vp温暖、活泼、治愈感全圆999vp按钮/标签的「药丸」形态本项目采用中等偏大的圆角契合「米色治愈风」的品牌定位。7.4 令牌命名的一致性约定四维令牌的命名遵循统一前缀规则便于 IDE 自动补全维度前缀示例字号sizesizeXs / sizeSm / sizeMd / sizeLg / sizeXl圆角radiusradiusSm / radiusMd / radiusLg / radiusFull间距spacingspacingXs / spacingSm / spacingMd / spacingLg行高lineHeightlineHeightSm / lineHeightMd / lineHeightLg输入AppFonts.后 IDE 会列出所有令牌极大提高开发效率。7.5 令牌系统的扩展路径随着项目规模增大四维令牌可进一步扩展字重令牌fontWeightLight / fontWeightRegular / fontWeightMedium / fontWeightBold字族令牌fontFamilyDefault / fontFamilyMono支持自定义字体包动态缩放比基于屏幕密度density自动计算最终渲染尺寸如果这篇文章对你有帮助欢迎点赞、收藏⭐、关注你的支持是我持续创作的动力

相关新闻

PIC微控制器直流电机控制方案与PWM实现

PIC微控制器直流电机控制方案与PWM实现

2026/8/23 0:35:19

1. 硬件选型与系统架构设计在开始直流电机控制项目前,选择合适的硬件平台至关重要。Fusion for PIC v8开发板搭配PIC18F57Q43微控制器,构成了一个强大而灵活的电机控制解决方案。这套组合特别适合需要精确控制、实时监测和可靠保护的直流电机应用场景。1…

STM32F722VE与TB67H480FNG高精度电机控制方案解析

STM32F722VE与TB67H480FNG高精度电机控制方案解析

2026/8/24 12:53:04

1. 为什么选择TB67H480FNG与STM32F722VE这对黄金组合在电机控制与嵌入式系统开发领域,TB67H480FNG驱动芯片与STM32F722VE微控制器的组合堪称性能与可靠性的标杆配置。TB67H480FNG是东芝(现为Kioxia)推出的高性能步进电机驱动IC,最…

2026年主流GEO服务商有哪些?核心信息清单梳理

2026年主流GEO服务商有哪些?核心信息清单梳理

2026/8/23 0:35:19

本文速览随着互联网核心范式从“搜索框蓝色链接”向“自然语言对话”演进,AI已经成为用户获取信息、做出消费决策的核心入口,GEO(生成式引擎优化)成为品牌布局AI时代的必选项。目前GEO行业仍处于快速发展阶段,不同服务…

一个双非软件工程本科生的逆风翻盘经历

一个双非软件工程本科生的逆风翻盘经历

2026/8/27 19:08:19

写在前面 我的高考分数不高,只上了一个很一般的学校,也对自己的专业不感兴趣。但庆幸的是,大学四年,我慢慢的对编程产生了兴趣,学会了如何学习并走入了编程的大门。 后来还算顺利吧!考上了某211硕&#xff…

多角色对话 AI 配音,短剧旁白轻松制作

多角色对话 AI 配音,短剧旁白轻松制作

2026/8/27 19:08:19

短剧赛道持续升温,从竖屏微短剧到小说推文配画面,"一人旁白 多角色对话"几乎成了标配结构。但多角色配音恰恰是 AI 配音中最容易翻车的环节——角色声音撞型、情绪衔接断裂、旁白和对话混在一起没有层次感。本文从多角色配音的实际难点出发&a…

实测11款AI配音工具,真正能商用的只有这几个

实测11款AI配音工具,真正能商用的只有这几个

2026/8/27 19:08:19

先声明:无广!纯自用踩坑经验,看完能帮你省至少500块会员费 👇😤 踩坑篇:这些雷我替你们踩过了坑1:某知名大厂工具(不点名了) 号称"免费试用",结果2…

爱了!阿里大神最佳总结“Flutter进阶学习笔记”,理论与实战

爱了!阿里大神最佳总结“Flutter进阶学习笔记”,理论与实战

2026/8/27 19:08:19

前言 “小步快跑、快速迭代”的开发大环境下,“一套代码、多端运行”是很多开发团队的梦想,美团也一样。他们做了很多跨平台开发框架的尝试:React Native、Weex、PWA 等等。但都没有得到很好的解决,直至遇到Flutter。 Flutter 提供…

干了5年Android开发,突然感觉自己啥也不会,啥也不想干,还要继续吗?

干了5年Android开发,突然感觉自己啥也不会,啥也不想干,还要继续吗?

2026/8/27 19:08:19

这是在某论坛看到的一名同行的吐槽:我干了差不多5年,不过给人感觉跟只有两三年的人一样。 我觉得我不适合干程序员,主要是新东西的接受能力比其他人慢,Android技术又更新得很快,感觉总是跟不上。年纪有些大了&#xff…

“入职一年,那个被高薪挖来的Android开发被劝退了。”

“入职一年,那个被高薪挖来的Android开发被劝退了。”

2026/8/27 18:58:18

其实,在很多小伙伴的想法中,是希望通过跳槽实现薪酬涨幅,可是跳槽不是冲动后决定,应该谨慎啊~ 01 我的学弟,最近向我吐槽,2020 年上半年入职一家公司,当时是高薪挖走的他,所谓钱到位…

[光学原理与应用-521]:对光的错误理解与纠偏

[光学原理与应用-521]:对光的错误理解与纠偏

2026/8/27 11:10:02

首先光是一种能量的载体和形态,宏观上观察到的光是由无数个微观的光量子组成的,每个光子在产生的瞬间,其在真空的空间中以确定不变的速度沿着一个初始的方向一直向前,在微观层面,每个光量子的运动轨迹是以波函数所展现…

SIP通话转接原理与REFER方法实战解析

SIP通话转接原理与REFER方法实战解析

2026/8/27 7:25:23

1. 通话转接不是“挂断再拨号”,而是SIP会话的动态重定向你有没有遇到过这样的场景:客服坐席A正在和客户通电话,突然需要把这通对话无缝转给专家坐席B,客户完全感知不到中间的断连——既没听到忙音,也没被要求重新拨号…

Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

2026/8/26 17:50:58

1. 为什么选择Kolla-ansible来部署单节点OpenStack?如果你正在寻找一种能把OpenStack从“概念”快速变成“可用的实验环境”的方法,那么Kolla-ansible几乎是当前最主流、最省心的选择。我见过太多人卡在手动编译依赖、配置服务、处理版本冲突的泥潭里&am…

Go语言构建企业级AI服务网关:统一管理英伟达等AI接口调用

Go语言构建企业级AI服务网关:统一管理英伟达等AI接口调用

2026/8/27 0:07:12

1. 项目概述:从零构建一个企业级的AI服务网关 最近在帮一个做内容审核的团队做技术架构升级,他们原来的业务里,每天有几十万张图片和短视频需要过审,最初是接了几个开源的AI模型自己部署,但效果和性能一直不太稳定。后…

LeetCode Hot100(51-60)算法精解与面试技巧

LeetCode Hot100(51-60)算法精解与面试技巧

2026/8/27 0:07:12

1. 题目背景与核心价值"hot100(51-60)"这个标题看起来像是某个编程题库或算法练习集中的一组题目编号。在技术社区中,类似命名通常指向LeetCode、牛客网等平台的热门题目集合。作为刷过300题的算法老手,我理解这类题目的核心价值在于&#xff…

CRC校验实战:从模2除法到HJ212协议排错

CRC校验实战:从模2除法到HJ212协议排错

2026/8/27 0:07:12

1. 为什么一个“校验码”能扛住工业现场90%的数据 corruption? 你有没有遇到过这样的场景:嵌入式设备通过RS-485上传温湿度数据,上位机偶尔收到一帧乱码——温度显示成-273℃,湿度跳到999%,但串口波形看起来完全正常&a…

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

2026/8/22 2:02:26

一天写完毕业论文在2026年已不再是天方夜谭。2026年最炸裂、实测能大幅提速的AI论文写作工具,覆盖选题构思、文献整理、内容生成、格式排版等核心场景,真正帮你高效搞定论文难题。 一、全流程王者:一站式搞定论文全链路(一天定稿首…

导师推荐!2026最新AI论文工具测评与实用推荐

导师推荐!2026最新AI论文工具测评与实用推荐

2026/8/26 18:07:30

2026年真正好用的AI论文工具,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 一、…

告别游戏崩溃:XCOM 2模组管理器的智能革命

告别游戏崩溃:XCOM 2模组管理器的智能革命

2026/8/26 17:57:52

告别游戏崩溃:XCOM 2模组管理器的智能革命 【免费下载链接】xcom2-launcher The Alternative Mod Launcher (AML) is a replacement for the default game launchers from XCOM 2 and XCOM Chimera Squad. 项目地址: https://gitcode.com/gh_mirrors/xc/xcom2-lau…