HarmonyOS 自定义字体没有效果?

请问下注册自定义字体只能将字体文件放在pages同级的文件夹下吗?我们软件中会展示多种字体效果,需要将字体文件从服务器端下载保存到本地后查看。路径如:/data/storage/el2/base/haps/entry/temp/mylikefonts/yhglb\_icon.ttf。现在测试时是看不到字体效果的,请问如何处理呢?

阅读 616
1 个回答

font.registerFont方法通常支持多种类型的字体文件路径,包括资源文件路径和绝对文件路径;暂不支持使用下载文件目录中的路径字体文件

注册自定义字体有如下三种方式配置

前置条件:

1.导入模块

import font from '@ohos.font'

2.俩个必须文件:xxx.ttf 和xxx.otf(例如:HarmonyOS\_Sans\_Thin.ttf、THSJinRongTi\_Bold.otf)

场景一:familyName和familySrc都支持string

操作步骤:

1.在src\main\ets\路径下新建一个目录:font,将前置条件中的俩个文件全都放入到这个font目录中;

2.配置下方内容:

aboutToAppear() {
  font.registerFont({
    familyName: 'medium', //命名名字随机
    familySrc: '/font/xxx.ttf' // 按照左边命名格式填写  
  })
}

3.在布局中使用时,按照以下格式使用即可

Text("第一种格式")
  .fontSize(30)

场景二:familyName和familySrc都支持系统Resource

操作步骤:

1.与场景一的步骤1相同;

2.配置以下内容:

aboutToAppear() {
  font.registerFont({
    familyName: $r('app.string.mediumFamilyName'), //设置注册的字体名称,命名按照app.string.XXX来命名即可
    familySrc: $r('app.string.mediumFamilySrc')    //设置注册字体文件的路径,命名同上,app.string.XXX切勿相同
  })
}

3.配置文件:需要在以下三个路径下的string.json中添加以下配置:

src/main/resources/base/element 、src/main/resources/en\_US/element、src/main/resources/zh\_CN/element

注意:以下内容全都需要添加到string.json中

{
  "name": "mediumFamilyName",  //name后跟的是familyName的根路径名称
  "value": "name"         //value后跟的name随机写,无硬性要求
}
{
  "name": "mediumFamilySrc", //name后跟的是familySrc的根路径名称
  "value": "/font/THSJinRongTi_Bold.otf"   //value后跟的是xxx.otf的路径
}

4.在布局中使用,按照以下方式来使用

Text(this.message)
  .fontSize(20)
  .fontFamily($r('app.string.mediumFamilyName'))  //注册的字体名称放入即可

场景三:familySrc支持RawFile

操作步骤:

1.在src/main/resources/rawfile路径下将前置条件中的俩个必须文件全都添加进去

2.配置以下内容:

aboutToAppear() {
  font.registerFont({
    familyName: 'mediumRawFile',                                     //设置注册的字体名称
    familySrc: $rawfile('font/THSJinRongTi_Bold.otf')        //设置注册字体文件的路径,将xxx.otf路径按左边方式放入
  })
}

3.在布局中使用,按照以下方式来使用

Text(this.message)
  .fontSize(20)
  .fontFamily("mediumRawFile")   //注册的字体名称放入即可