HarmonyOS 鸿蒙Next 自定义字体没有效果

发布于 1周前 作者 gougou168 来自 鸿蒙OS

HarmonyOS 鸿蒙Next 自定义字体没有效果

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

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

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

前置条件:

1.导入模块

import font from '[@ohos](/user/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: <span class="hljs-string">'medium'</span>, <span class="hljs-comment">//命名名字随机</span>

familySrc: <span class="hljs-string">'/font/xxx.ttf'</span> <span class="hljs-comment">// 按照左边命名格式填写 &nbsp;</span>

})

}<button style="position: absolute; padding: 4px 8px 0px; cursor: pointer; top: 8px; right: 8px; font-size: 14px;">复制</button>

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

Text(“第一种格式”)

      .fontSize(30)<button style="position: absolute; padding: 4px 8px 0px; cursor: pointer; top: 8px; right: 8px; font-size: 14px;">复制</button>

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

操作步骤:

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

2.配置以下内容:

aboutToAppear() {

font.registerFont({

familyName: $r(<span class="hljs-string">'app.string.mediumFamilyName'</span>), <span class="hljs-comment">//设置注册的字体名称,命名按照app.string.XXX来命名即可</span>

familySrc: $r(<span class="hljs-string">'app.string.mediumFamilySrc'</span>) &nbsp; &nbsp;<span class="hljs-comment">//设置注册字体文件的路径,命名同上,app.string.XXX切勿相同</span>

})

}<button style="position: absolute; padding: 4px 8px 0px; cursor: pointer; top: 8px; right: 8px; font-size: 14px;">复制</button>

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的路径

}<button style="position: absolute; padding: 4px 8px 0px; cursor: pointer; top: 8px; right: 8px; font-size: 14px;">复制</button>

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

Text(this.message)
.fontSize(20)
.fontFamily($r(‘app.string.mediumFamilyName’)) //注册的字体名称放入即可<button style="position: absolute; padding: 4px 8px 0px; cursor: pointer; top: 8px; right: 8px; font-size: 14px;">复制</button>

场景三:familySrc支持RawFile

操作步骤:

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

 2.配置以下内容:

aboutToAppear() {

      font.registerFont({

          familyName: ‘mediumRawFile’,                                     //设置注册的字体名称

          familySrc: $rawfile(‘font/THSJinRongTi_Bold.otf’)        //设置注册字体文件的路径,将xxx.otf路径按左边方式放入

      })

}<button style="position: absolute; padding: 4px 8px 0px; cursor: pointer; top: 8px; right: 8px; font-size: 14px;">复制</button>

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

Text(this.message)

          .fontSize(20)

          .fontFamily(“mediumRawFile”)   //注册的字体名称放入即可<button style="position: absolute; padding: 4px 8px 0px; cursor: pointer; top: 8px; right: 8px; font-size: 14px;">复制</button>

当前的注册自定义字体都是需要放置到本地,再通过代码去加载字体;暂时无法实现动态加载

参考链接:

https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/js-apis-font-V5#fontregisterfont

更多关于HarmonyOS 鸿蒙Next 自定义字体没有效果的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


这个方法可以试试 可以用

针对HarmonyOS 鸿蒙Next 自定义字体没有效果的问题,以下是一些可能的解决方案:

  1. 检查字体文件

    • 确保自定义字体文件(如.ttf或.otf)已被正确放置在项目的资源目录中,如font目录。
    • 检查字体文件格式是否支持并符合鸿蒙系统的要求。
  2. 检查字体注册代码

    • 确保使用正确的API进行字体注册,如font.registerFontwindowStages.getUIContext().getFont().registerFont
    • 检查字体注册信息是否正确,包括familyNamefamilySrc
  3. 检查字体使用方式

    • 在需要应用自定义字体的组件中,通过fontFamily属性指定已注册的字体名称。
    • 确保字体注册在应用的入口文件(如EntryAbility.ets)的合适生命周期函数中,如onWindowStageCreate
  4. 调试与测试

    • 在真机或模拟器上调试,预览器上可能无法正常展示自定义字体。
    • 检查是否有其他代码或设置影响了自定义字体的应用。

如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部