registerFont注册应用全局生效的自定义字体失败。

问题代码如下:
// 注册iconFont
this.getUIContext().getFont().registerFont({
familyName: 'iconFont',
// 自定义字体存储在rawfile的font文件夹下
familySrc: $rawfile('font/XXXX.TTF')
}); @Entry
@Component
struct Index {
build() {
Column() {
// 使用自定义字体的文字
Text('图标字体')
.fontSize(30)
.fontFamily('iconfont');
// 使用默认字体的文字
Text('图标字体')
.fontSize(30);
}.width('100%');
}
} 可参考官方文档@ohos.font(注册自定义字体)。
定位自定义字体无法使用的原因时,首先应确认字体注册信息配置是否正确。若字体注册信息配置无误,但字体仍无法正常显示,则需进一步检查字体实例的生命周期状态是否处于有效范围。
请根据接口文档registerFont进行检查。
当自定义字体注册信息填写正确,但仍然无法使用时,是因为全局使用自定义字体,需在EntryAbility.ets文件的onWindowStageCreate生命周期中,通过windowStage.loadContent回调来注册。详情参考loadContent回调方法。
根据定位思路可以做出如下操作:
首先请检查注册信息填写是否有误。
确保注册路径正确无误,如将自定义字体放在rawfile的font文件夹下,则在代码中使用时须保持路径正确$rawfile('font/XXX.ttf')。
onWindowStageCreate(windowStage: window.WindowStage): void {
// Main window is created, set main page for this ability
hilog.info(DOMAIN, 'testTag', '%{public}s', 'Ability onWindowStageCreate');
windowStage.loadContent('pages/Index', (err) => {
if (err.code) {
hilog.error(DOMAIN, 'testTag', 'Failed to load the content. Cause: %{public}s', JSON.stringify(err));
return;
}
windowStage.getMainWindow().then(res => {
// 注册全局生效的自定义字体
const uiCtc = res.getUIContext();
uiCtc.getFont().registerFont({
familyName: 'iconfont',
// 字体文件保存在rawfile目录下,字体资源文件需自行配置
familySrc: $rawfile('font/HarmonyOS_Sans_SC_Thin.ttf')
});
});
hilog.info(DOMAIN, 'testTag', 'Succeeded in loading the content.');
});
} @Entry
@Component
struct Index {
build() {
Column() {
// 使用自定义字体的文字
Text('图标字体')
.fontSize(30)
.fontFamily('iconfont');
// 使用默认字体的文字
Text('图标字体')
.fontSize(30);
}.justifyContent(FlexAlign.Center)
.height('100%')
.width('100%');
}
} 效果预览:

其他注意事项:
Q:在onWindowStageCreate中全局注册了自定义字体,有无全局设置应用自定义字体的方法?
A:可以使用ApplicationContext.setFont来全局设置字体应用到整个项目。在windowStage.loadContent方法中调用ApplicationContext.setFont()即可。
Q:使用ApplicationContext.setFont切换到自定义字体后,如何切换回跟随系统字体?
A:调用ApplicationContext.setFont传入"null"即可恢复跟随系统字体。
@ohos.font可以注册页面级的字体,也可以注册全局性的字体,全局字体需要通过windowStage.loadContent进行回调注册。
合作咨询
我们的专家服务团队将竭诚为您提供专业的合作咨询服务
解决方案
精准高效的一站式服务支持,助力开发者商业成功