HarmonyOS鸿蒙Next中Form Kit开发小卡片的扩展中怎么自定义字体
HarmonyOS鸿蒙Next中Form Kit开发小卡片的扩展中怎么自定义字体 新的接口注册会依赖uiContext
uiContext.getFont().registerFont
在App中很容易获取到这个参数
在Form Kit中, 获取到当前的context是一个特定的FormExtensionContext. 没有看到有uiContext的上下文呢.
那里有文档提及formkit中怎么使用呢?
就想问下, 这设计的接口同志, 字体注册设计为何非要依赖uicontext的上下文呢…
在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模块中)
这种设计保证了字体资源在卡片和宿主应用间的正确隔离和共享。

