随着HarmonyOS NEXT的发展,开发者们能够更加灵活地定制应用的视觉体验,包括但不限于自定义字体的使用。本文将介绍如何在HarmonyOS NEXT应用中实现自定义字体的加载与使用,并涵盖使用emoji表情以及处理特殊字符的显示等场景。
场景一:应用设置三方字体
方案概述
要在HarmonyOS NEXT应用中使用自定义字体,首先需要将字体文件(.ttf)放置到指定位置,并在应用启动时注册该字体。
步骤:
- 创建字体目录:在
pages
同级目录下创建一个font
目录。 - 放置字体文件:将字体文件(如AlimamaFangYuanTiVF-Thin.ttf)放置到
font
目录或resfile
目录中。 - 注册字体:在
EntryAbility.ets
文件的windowStage.loadContent
函数中调用font.registerFont
方法注册全局自定义字体。 - 使用自定义字体:在需要的页面中,通过
fontFamily
属性指定所注册的字体名称来使用自定义字体。
核心代码示例
onWindowStageCreate(windowStage: window.WindowStage): void {
windowStage.loadContent('pages/Index', (err) => {
font.registerFont({
familyName: 'roundFont',
familySrc: '/font/AlimamaFangYuanTiVF-Thin.ttf'
});
if (err.code) {
hilog.error(0x0000, 'testTag', 'Failed to load the content. Cause: %s', JSON.stringify(err));
return;
}
hilog.info(0x0000, 'testTag', 'Succeeded in loading the content.');
});
}
@Entry
@Component
struct GlobalFont {
build() {
Column() {
Text('氛围感')
.fontFamily('roundFont')
.fontColor('#ffffff')
.fontSize(30)
.fontWeight(FontWeight.Bold)
.margin({ top: -500 });
Text('听听海风的声音~')
.fontColor('#ffffff')
.fontSize(30)
.margin({ top: -400 });
}
.height('100%')
.width('100%');
}
}
场景二:使用emoji表情
方案概述
使用emoji表情有两种方式:一种是使用自定义的emoji字体文件;另一种是直接使用系统内置的emoji表情。
核心代码示例
自定义emoji
aboutToAppear(): void {
font.registerFont({
familyName: 'emoji',
familySrc: $rawfile('NotoColorEmoji-Regular.ttf')
});
}
Flex({ direction: FlexDirection.RowReverse, alignItems: ItemAlign.Center }) {
Text('通过注册自定义字体得到的emoji')
.fontFamily('emoji')
.fontSize(20)
.backgroundColor('#ffc6ecf3')
.padding(10)
.borderRadius(20);
}.width('90%').margin(20);
系统内置emoji
Flex({ direction: FlexDirection.Row, alignItems: ItemAlign.Center }) {
Text('系统内置的' + String.fromCodePoint(0x1F97A))
.fontSize(20)
.backgroundColor('#fff')
.padding(10)
.borderRadius(20);
}.width('90%');
场景三:Text&TextArea支持icon
方案概述
类似地,可以使用iconfont提供的图标字体文件,下载后按照自定义字体的方法进行注册和使用。
场景四:Text生僻字的显示
方案概述
对于系统默认字体无法显示的生僻字,可以通过加载包含这些字符的字体文件来解决。
常见问题
在page中注册字体没问题,但在UIAbility中注册字体时偶尔会出现失败的情况。这种可以在页面完全加载后注册字体,例如在windowStage.loadContent
回调中执行字体注册操作。