HarmonyOS 鸿蒙Next中rictText加载html字符串时设置font-family无效
HarmonyOS 鸿蒙Next中rictText加载html字符串时设置font-family无效
<div style="font-size: 100px !important;text-weight: bold; text-align: center !important; font-family: 'YuanHei', sans-serif !important;">
欢迎来到<span style='color: #F93834;'>鸿蒙世界</span>
</div>
项目里已经注册并且使用过YuanHei字体,但是richtext无法正常加载,应该怎么实现?
【问题分析】
我尝试用了三种方式来加载楼主给出的富文本信息,样式基本是一致的
【解决方案】
1.使用富文本组件RichText进行加载
2.使用Web组件加载
import { webview } from '@kit.ArkWeb';
@Entry
@Component
struct FocusTestPage {
@State data: string = `
<div style="font-size: 100px !important;text-weight: bold; text-align: center !important; font-family: 'YuanHei', sans-serif !important;">
欢迎来到<span style='color: #F93834;'>鸿蒙世界</span>
</div>
`;
webviewController: webview.WebviewController = new webview.WebviewController();
build() {
Column() {
RichText(this.data)
.height(300)
Web({ src: '', controller: this.webviewController })
.onControllerAttached(() => { // 当Controller成功绑定到Web组件时触发该回调
this.webviewController.loadData(this.data, "text/html", "UTF-8", " ", " ")
})
.width('100%')
.height(300)
.minFontSize(30)
}
}
}
实现效果

3.在电脑上使用html文件直接加载富文本

【总结】
三种效果没有明显差异,楼主参考是否与你想要的效果一致
【参考文档】
更多关于HarmonyOS 鸿蒙Next中rictText加载html字符串时设置font-family无效的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
【问题背景】:根据反馈只能得知html代码设置了字体样式,但是不知道是如何注册的
【原理】:
自定义字体的注册是指将字体文件(如ttf、otf文件等)从应用资源注册到系统中,使得应用能够使用这些字体进行文本渲染。注册过程是将字体文件通过字体管理接口注册到系统字体库中,以便在应用中进行调用。
【解决思路】:
- 先在全局注册一下字体
import { text } from '@kit.ArkGraphics2D'
// 注册自定义字体
let fontCollection = text.FontCollection.getGlobalInstance()
// 字体文件放在本应用工程的entry/src/main/resources/rawfile目录
fontCollection.loadFontSync('YuanHei',$rawfile('YuanHei.ttf'))

2、使用下列标签查看是否生效
<p style="font-size: 35px; font-family: YuanHei; color: rgb(24,78,228)">测试</p>
在HarmonyOS Next中,rictText组件加载HTML字符串时font-family属性无效,是因为当前版本对CSS字体样式支持不完整。鸿蒙的rictText基于自有渲染引擎实现,仅支持部分标准HTML/CSS属性。font-family需要依赖系统字体库,而鸿蒙Next的Web组件暂未完全开放字体系统接口。可通过使用系统预设字体样式或转换为Span文本分段样式处理。该限制已在官方文档的兼容性说明中标注。
在HarmonyOS Next中,RichText组件默认不支持通过HTML字符串直接加载自定义字体(如’YuanHei’)。这是因为系统出于安全性和性能考虑,限制了HTML内联样式中的font-family属性。
建议通过以下方式实现:
- 将自定义字体文件(如YuanHei.ttf)放在项目的
resources/base/media目录下。 - 在
aboutToAppear生命周期中使用font模块加载字体:
import { font } from '@kit.ArkUI';
// 加载字体
font.registerFont({
familyName: 'YuanHei',
src: 'resources/base/media/YuanHei.ttf'
});
- 对RichText外层容器设置字体样式:
// 在RichText的父组件上设置字体
struct Index {
build() {
Column() {
RichText($rawfile('your_html_content.html'))
.fontFamily('YuanHei') // 直接设置字体
}
.width('100%')
.height('100%')
}
}
如果必须使用HTML内容,可以考虑:
- 将HTML内容转换为原生ArkUI组件
- 使用Web组件加载本地HTML文件(需注意性能影响)
当前RichText对CSS的支持有限,建议优先使用ArkUI的原生样式设置方式。

