HarmonyOS鸿蒙Next中api参考fontfamily的说明需要优化

HarmonyOS鸿蒙Next中api参考fontfamily的说明需要优化 【问题描述】:开发文档api参考中fontfamily的说明需要优化

【问题现象】:

cke_56800.png

.fontFamily("Arial, HarmonyOS Sans")

官方文档中,Arial, HarmonyOS Sans这中间存在空格,实际上用逗号分隔的值只需要与registerFont中的familyName相对应就行,如果familyName中存在空格,那么前面加空格才能生效

【版本信息】:不涉及

【复现代码】:见下文

【尝试解决方案】:

cke_17926.png

cke_18464.png

如果有空格,在registerFont方法中设置familyName为“ testFont2”,就能生效,这时如果去掉空格反而不生效


更多关于HarmonyOS鸿蒙Next中api参考fontfamily的说明需要优化的实战教程也可以访问 https://www.itying.com/category-93-b0.html

5 回复

开发者你好,这边未能复现所述情况,还请提供可复现demo,文档对fontFamily的解释是:”

字体族。默认字体’HarmonyOS Sans’。

使用多个字体时,请用逗号’,'分隔,字体的优先级按顺序生效。例如:‘Arial, HarmonyOS Sans’。

“也就是当Arial字体已注册且存在时,会优先生效Arial,如果Arial不存在才会生效后面的HarmonyOS Sans。在描述所给的代码中testFont1已注册且存在,按照代码的设置顺序,testFont1优先生效,testFont2后一个生效,所以空格不会影响生效的顺序及最终效果

以下是测试示例:

@Entry
@Component
struct PageTestFont {
  @State message: string = 'Hello World';

  aboutToAppear(): void {
    this.getUIContext().getFont().registerFont({
      familyName:'testFont3',
      familySrc:$rawfile('test3.ttf')
    })
    this.getUIContext().getFont().registerFont({
      familyName:'test2',
      familySrc:$rawfile('test2.ttf')
    })
  }

  build() {
    RelativeContainer() {
      Text(this.message)
        .fontFamily('testFont3,test2')
        .id('PageTestFont')
        .fontSize($r('app.float.page_text_font_size'))
        .fontWeight(FontWeight.Bold)
        .alignRules({
          center: { anchor: '__container__', align: VerticalAlign.Center },
          middle: { anchor: '__container__', align: HorizontalAlign.Center }
        })
        .onClick(() => {
          this.message = 'Welcome';
        });
    }
    .height('100%')
    .width('100%');
  }
}

更多关于HarmonyOS鸿蒙Next中api参考fontfamily的说明需要优化的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


进一步分析:使用时传入的字体名称需要和注册时保持一致,如果注册时有空格,那么在使用时也需要空格。另外分析所给demo发现,demo中使用的testFont1和testFont2是相同的,如果希望看出不同的效果还请使用不同的字体文件进行测试。

你好,我是希望官方文档能够把Arial, HarmonyOS Sans这中间的空格删除,中间加了空格容易产生误导,

HarmonyOS Next中fontFamily API的文档已更新,优化了字体加载和回退机制的说明。新增了对系统字体、自定义字体及多字重字体的支持示例,明确了字体文件的存储路径规范。文档现在更清晰地展示了如何通过ResourceManager加载字体资源,并提供了字体匹配优先级和异常处理的相关说明。

您提出的关于 fontFamily API 文档中空格问题的反馈非常专业且准确。这确实是一个需要澄清的关键细节。

核心问题分析:

您指出的现象是正确的:在 .fontFamily() 方法中,当使用逗号分隔的字体族列表时,逗号后的空格是字体族名称的一部分,而不是简单的分隔符空格。

  • 文档示例.fontFamily("Arial, HarmonyOS Sans")
    • 这里的 "HarmonyOS Sans" 是一个整体,作为字体族名称。它之所以生效,是因为系统预置或注册的字体族名称就是 "HarmonyOS Sans"(包含中间的空格)。
  • 您的验证.fontFamily("Arial, testFont2") 不生效,而 .fontFamily("Arial, testFont2")testFont2 前有两个空格)生效。
    • 这恰好证明了规则:您通过 registerFont 注册的字体,其 familyName" testFont2"(以空格开头)。因此,在 .fontFamily() 列表中,必须完整包含这个带空格的名称 " testFont2" 才能匹配成功。

结论与文档优化建议:

当前文档示例 "Arial, HarmonyOS Sans" 容易引起误解,让人误以为逗号后加一个空格是语法格式。实际上,逗号后面紧跟的内容(包括任何前置空格)都必须与目标字体族名称完全一致

更清晰的文档说明应强调:

.fontFamily() 方法的参数字符串是一个逗号分隔的字体族名称列表。列表中的每个名称都必须与通过 registerFont 注册时使用的 familyName 或系统已知的字体族名称完全匹配(包括大小写和空格)。

因此,您的发现并非代码行为异常,而是文档描述不够精确,未能明确“空格是名称的一部分”这一匹配规则。感谢您的细致测试,这对于完善API文档的准确性很有帮助。

回到顶部