鸿蒙应用如何接入第三方字体?
适用范围本文适用于使用 ArkTS 和 ArkUI 开发的 HarmonyOS 应用说明如何将.ttf或.otf字体文件放入工程、完成字体注册并在Text等组件中使用较早的项目可能使用ohos.font中的静态registerFont()方法该方法在较新的 API 中已经废弃新代码应优先使用UIContext提供的字体管理接口准备字体文件第三方字体通常以.ttf或.otf文件提供HarmonyOS 工程可以同时存放多个字体文件使用字体前需要确认以下事项字体授权允许嵌入应用并随安装包分发中文字体文件通常较大需要关注 HAP 安装包体积文件名建议只使用英文字母、数字、连字符和下划线放置字体文件在模块的resources/rawfile目录下创建fonts目录并将字体文件放入其中entry/src/main/resources/rawfile/fonts/SourceHanSerifSC-Regular.otf字体授权文件 ( license / OFL ) 建议与字体一起保留但授权文件不参与字体注册定义字体名称常量建议将应用使用的字体名称集中定义避免在多个页面中重复填写字符串在以下位置创建字体配置文件entry/src/main/ets/common/AppFonts.ets写入exportconstAPP_SERIF_FONT_FAMILY:stringxxSourceHanSerif;这里的xxSourceHanSerif是应用内部使用的字体别名可以自行命名该名称不必与字体文件名完全一致但注册字体和使用字体时必须保持一致注册字体字体文件放入工程后不能直接通过.fontFamily()使用必须先在 UI 上下文中完成注册可以在应用入口页面的aboutToAppear()生命周期中注册例如import{hilog}fromkit.PerformanceAnalysisKit;import{APP_SERIF_FONT_FAMILY}from../common/AppFonts;EntryComponentstruct Index{aboutToAppear():void{try{this.getUIContext().getFont().registerFont({familyName:APP_SERIF_FONT_FAMILY,familySrc:$rawfile(fonts/SourceHanSerifSC-Regular.otf)});}catch(error){hilog.error(0x0000,HomePage,Register app font failed: %{public}s,JSON.stringify(error));}}build(){Column(){Text(应用首页)}}}familyName字体在应用中的注册名称后续.fontFamily()必须使用同一个名称familySrc字体文件资源使用$rawfile()进行链接$rawfile(fonts/SourceHanSerifSC-Regular.otf)注册时机应在首次渲染使用该字体的组件之前完成注册单 UIAbility、单主窗口应用通常可以在入口页面注册一次不应在每个普通组件中重复注册如果应用包含多个 UIAbility、多个窗口或彼此独立的 UIContext需要在相应 UIContext 中分别确认字体已经注册在组件中使用字体先导入字体名称常量import{APP_SERIF_FONT_FAMILY}from../common/AppFonts;然后通过.fontFamily()应用字体Text(瓷序).fontSize(30).fontFamily(APP_SERIF_FONT_FAMILY).fontColor(#D8A756)只需要对部分文字使用第三方字体时给对应的Text组件设置.fontFamily()即可Column({space:12}){Text(使用第三方字体的标题).fontFamily(APP_SERIF_FONT_FAMILY).fontSize(28)Text(继续使用系统默认字体的正文).fontSize(16)}注册多个字体文件fonts目录中可以放置多个.otf或.ttf文件每个需要使用的字体文件都应单独注册例如entry/src/main/resources/rawfile/fonts/ ├─ SourceHanSerifSC-Regular.otf ├─ SourceHanSerifSC-Medium.otf └─ SourceHanSansSC-Regular.otf可以先定义多个字体名称exportconstAPP_SERIF_REGULAR:stringxxSerifRegular;exportconstAPP_SERIF_MEDIUM:stringxxSerifMedium;exportconstAPP_SANS_REGULAR:stringxxSansRegular;再分别注册constfontManagerthis.getUIContext().getFont();fontManager.registerFont({familyName:APP_SERIF_REGULAR,familySrc:$rawfile(fonts/SourceHanSerifSC-Regular.otf)});fontManager.registerFont({familyName:APP_SERIF_MEDIUM,familySrc:$rawfile(fonts/SourceHanSerifSC-Medium.otf)});fontManager.registerFont({familyName:APP_SANS_REGULAR,familySrc:$rawfile(fonts/SourceHanSansSC-Regular.otf)});使用时选择对应的字体名称Text(中等字重标题).fontFamily(APP_SERIF_MEDIUM).fontSize(24)Text(无衬线正文).fontFamily(APP_SANS_REGULAR).fontSize(16)推荐的工程组织方式字体文件、字体名称和字体使用代码建议分别承担不同职责entry/src/main/resources/rawfile/fonts/存放字体文件和授权文件entry/src/main/ets/common/AppFonts.ets定义字体名称常量entry/src/main/ets/pages/Index.ets在入口页面注册字体entry/src/main/ets/components/ entry/src/main/ets/pages/在具体组件和页面中通过.fontFamily()使用字体完整链接关系字体从文件到界面生效的关系如下字体文件 entry/src/main/resources/rawfile/fonts/SourceHanSerifSC-Regular.otf │ │ $rawfile(fonts/SourceHanSerifSC-Regular.otf) ▼ registerFont({ familyName, familySrc }) │ │ familyName: xxSourceHanSerif ▼ APP_SERIF_FONT_FAMILY │ │ .fontFamily(APP_SERIF_FONT_FAMILY) ▼ Text 等 ArkUI 组件常见问题粗体效果不符合预期不要只依赖系统模拟粗体将对应的 Medium、Semibold 或 Bold 字体文件单独注册并使用应用安装包明显变大中文字体可能包含大量字符应只保留项目确实需要的字体和字重并在字体授权允许的前提下考虑使用官方子集版本字体文件可以放多个吗可以同一个fonts目录能够存放多个.otf和.ttf文件但每个实际使用的文件都需要注册

相关新闻

OpenWrt软路由安装可道云

OpenWrt软路由安装可道云

前一阵买了个新3刷了OPenWrt固件,使用了一周体验了下真香。 什么是软路由? 答:传统路由器只能进行简单的上网设置内存小不支持定制,但是软路由有大内存可以在里面安装各种各样的软件来进行自定义操作,不仅仅可以拥有…

2026/7/23 17:18:43阅读更多 →
深入解析以太网PHY寄存器:中断管理与自动协商实战

深入解析以太网PHY寄存器:中断管理与自动协商实战

1. 以太网PHY寄存器:嵌入式网络连接的基石 在嵌入式系统开发中,实现稳定可靠的以太网连接往往被视为一项“黑盒”操作。很多开发者习惯于依赖现成的驱动库,调用几个初始化函数,看到网络指示灯亮起,便认为大功告成。然而…

2026/7/23 17:18:43阅读更多 →
linux查看某个pid的所有进程;排查进程下的线程

linux查看某个pid的所有进程;排查进程下的线程

top -H -p $PID #查看对应进程的那个线程占用CPU过高 1、top -H 手册中说:-H : Threads toggle 加上这个选项启动top,top一行显示一个线程。否则,它一行显示一个进程。 2、ps xH 手册中说:H Show threads as if they were proces…

2026/7/23 17:16:43阅读更多 →
收藏!10个企业级AI高频应用场景,小白也能轻松落地实践

收藏!10个企业级AI高频应用场景,小白也能轻松落地实践

本文梳理了10个企业级AI高频应用场景,包括知识库、流程自动化、财务管理和合同审查等,展示了AI如何解决企业实际问题。同时,文章还提供了企业落地AI的步骤,包括明确场景、数据处理、试点推广和持续优化,旨在帮助企业科…

2026/7/23 18:35:00阅读更多 →
怎么刷入Openwrt软路由到了笔记本电脑上并作为旁路由?旁路由应该怎么设置?

怎么刷入Openwrt软路由到了笔记本电脑上并作为旁路由?旁路由应该怎么设置?

前一篇大概介绍了软路由是啥?Openwrt 是什么?软路由是什么? 软路由和主路由的线怎么连接?旁路由是什么?怎么理解DHCP?什么是IP地址?-CSDN博客 这一篇主要介绍怎么把Openwrt输入到了笔记本电脑上,达成初步里程碑。 我的配置方法 1)我是废旧笔记本电脑直接刷入软路由…

2026/7/23 18:35:00阅读更多 →
mysql多条查询结果纵向拼接

mysql多条查询结果纵向拼接

标签:MySQL、UNION、UNION ALL、纵向合并、SQL优化、慢查询治理 前言 在日常开发中,我们经常需要把多条独立SELECT查询的结果上下堆叠合并,也就是纵向拼接。 很多人容易混淆两个概念: JOIN:横向拼接,增加列…

2026/7/23 18:35:00阅读更多 →
MySQL查询去重是使用UNION还是使用DISTINCT

MySQL查询去重是使用UNION还是使用DISTINCT

标签:MySQL、SQL优化、去重、UNION、DISTINCT、UNION ALL、执行计划 前言 开发过程中经常面临数据去重需求,大家常会纠结两种方案: 使用 DISTINCT 在单条结果集中完成去重;使用 UNION 合并多条查询并自动去重。 还有很多开发者分不…

2026/7/23 18:35:00阅读更多 →
深入解析TI N2HET指令集:从硬件定时器原理到汽车ECU实战编程

深入解析TI N2HET指令集:从硬件定时器原理到汽车ECU实战编程

1. 项目概述:为什么需要深入理解N2HET指令集?在汽车发动机控制单元(ECU)、电机驱动或者任何对时序有“变态级”要求的嵌入式实时系统中,通用CPU软件循环的“软定时”早就被淘汰了。这类场景下,我们需要的是…

2026/7/23 18:35:00阅读更多 →
线程同步——互斥和条件变量

线程同步——互斥和条件变量

文章目录1. 互斥锁1.1 互斥锁1.1.1 普通互斥锁加锁代码示例1.1.2 递归互斥锁1.3 自旋锁代码示例1.4 定时锁1.4.1 普通定时锁1.4.2 递归定时锁2 读写锁使用方法代码示例3. 锁保护3.1 lock_guard代码示例实现原理3.2 唯一锁4. 条件变量和消费者模式3.1 条件变量3.2 生产者消费者模…

2026/7/23 18:33:00阅读更多 →
Go语言静态资源打包方案对比与实践指南

Go语言静态资源打包方案对比与实践指南

1. 项目背景与核心需求在Go语言开发中,我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源,还是配置文件、证书等,都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下,但这…

2026/7/23 0:56:31阅读更多 →
Go语言实现高性能LDAP认证服务的架构与实践

Go语言实现高性能LDAP认证服务的架构与实践

1. 项目背景与核心价值LDAP(轻量级目录访问协议)作为企业级身份认证的黄金标准,已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时,发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…

2026/7/23 0:56:31阅读更多 →
【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

更多请点击: https://intelliparadigm.com 第一章:AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”,而是以可解释、可审计、可迭代的方式,赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…

2026/7/23 0:56:31阅读更多 →
Chitchatter完整指南:免费开源的终极点对点安全聊天工具

Chitchatter完整指南:免费开源的终极点对点安全聊天工具

Chitchatter完整指南:免费开源的终极点对点安全聊天工具 【免费下载链接】chitchatter Secure peer-to-peer chat that is serverless, decentralized, and ephemeral 项目地址: https://gitcode.com/gh_mirrors/ch/chitchatter Chitchatter是一款革命性的安…

2026/7/23 0:00:28阅读更多 →
从单点好评到指数级传播:AI副业主理人必须掌握的4层口碑渗透模型(含ROI测算表)

从单点好评到指数级传播:AI副业主理人必须掌握的4层口碑渗透模型(含ROI测算表)

更多请点击: https://intelliparadigm.com 第一章:从单点好评到指数级传播:AI副业主理人必须掌握的4层口碑渗透模型(含ROI测算表) 当AI副业主理人不再仅满足于单次服务交付,而是主动构建可复用、可裂变、可…

2026/7/23 0:00:28阅读更多 →
油泥处理设备哪里能买到

油泥处理设备哪里能买到

油泥处理设备哪里有?这是许多从事油田、炼化、清罐业务的从业者最关心的问题。根据河南三丰环保设备有限公司的行业经验,选购油泥处理设备的核心在于设备能否适配当地环保法规与原料特性,而非单纯看价格。该公司总经理王钦田先生指出&#xf…

2026/7/23 0:00:28阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/22 22:56:18阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/22 18:55:50阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/22 18:55:50阅读更多 →