HarmonyOS鸿蒙Next中Form Kit开发小卡片的扩展中怎么自定义字体

HarmonyOS鸿蒙Next中Form Kit开发小卡片的扩展中怎么自定义字体 新的接口注册会依赖uiContext

uiContext.getFont().registerFont

在App中很容易获取到这个参数

在Form Kit中, 获取到当前的context是一个特定的FormExtensionContext. 没有看到有uiContext的上下文呢.

那里有文档提及formkit中怎么使用呢?

就想问下, 这设计的接口同志, 字体注册设计为何非要依赖uicontext的上下文呢…

3 回复

在EntryAbility中提前注册字体

// EntryAbility.ets
onWindowStageCreate(windowStage: window.WindowStage) {
  windowStage.loadContent('pages/Index', (err, data) => {
    const uiContext = windowStage.getMainWindowSync().getUIContext();
    uiContext.getFont().registerFont({
      familyName: 'globalFont',
      familySrc: $rawfile('fonts/global.ttf')
    });
  });
}

更多关于HarmonyOS鸿蒙Next中Form Kit开发小卡片的扩展中怎么自定义字体的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS Next的Form Kit中,自定义卡片字体需使用ArkTS。通过@ohos.font模块加载字体文件(如.ttf),使用Font接口的registerFont方法注册。在UI组件中,通过fontFamily属性引用注册的字体名称。字体文件需置于resources/base/media/目录下。

在HarmonyOS Next的Form Kit中自定义字体,确实需要解决uiContext的获取问题。FormExtensionContext本身不直接提供uiContext,但可以通过以下方式解决:

1. 获取uiContext的正确方式: 在FormExtensionAbility中,可以通过windowStage.getMainWindow()获取到UI上下文:

import formBindingData from '@ohos.app.form.formBindingData';
import FormExtensionAbility from '@ohos.app.form.FormExtensionAbility';

export default class FormAbility extends FormExtensionAbility {
  onAddForm(want) {
    // 获取uiContext
    let uiContext = this.context.uiContext;
    // 或者通过windowStage
    // let uiContext = this.windowStage?.getMainWindow()?.getUIContext();
    
    // 注册字体
    if (uiContext) {
      uiContext.getFont().registerFont({
        familyName: 'MyFont',
        familySrc: 'font/myfont.ttf'
      });
    }
    
    return formBindingData.createFormBindingData({});
  }
}

2. 设计原理说明: 字体注册依赖uiContext是因为字体资源需要绑定到具体的UI渲染上下文。Form Kit的小卡片虽然独立运行,但最终需要集成到宿主应用的UI渲染管线中。uiContext确保了字体资源能在正确的渲染环境中加载和管理,避免资源冲突。

3. 文档参考:

  • FormExtensionAbility开发指南中关于上下文获取的部分
  • UI上下文管理相关API文档
  • 字体注册接口的详细说明(在@ohos.arkui.UIContext模块中)

这种设计保证了字体资源在卡片和宿主应用间的正确隔离和共享。

回到顶部