跳到主要内容

ArkTS卡片使用自定义字体

API version 22开始新增了ohos.graphics.text.FontCollection.getLocalInstance接口获取本地字体集实例,应用可以通过这个本地实例为卡片加载自定义字体。

开发步骤

  1. 创建动态卡片:按照创建ArkTS卡片里的描述创建动态卡片。

  2. 在项目entry\src\main\resources\rawfile目录下添加自定义字体文件xxx.ttf。

  3. 页面布局代码实现entry/src/main/ets/widget/pages/WidgetCard.ets。

    在卡片页面中布局两个按钮,点击按钮load font或按钮unload font,调用本地字体集实例的loadFontSync、unloadFontSync进行字体的加载、卸载。

// entry/src/main/ets/widget/pages/WidgetCard.ets
import { text } from '@kit.ArkGraphics2D';

@Entry
@Component
struct loadFontSyncCard {
// 在这里使用getLocalInstance访问本地字体集实例
private fc: text.FontCollection = text.FontCollection.getLocalInstance();
@State content: string = '默认字体';

build() {
Column({ space: 10 }) {
Text(this.content)
.fontFamily('custom') // 在此处声明组件使用自定义字体
Button('load font')
.onClick(() => {
// 在此处加载自定义字体文件
this.fc.loadFontSync('custom', $rawfile('xxx.ttf'));
this.content = '自定义字体';
})
Button('unload font')
.onClick(() => {
this.fc.unloadFontSync('custom');
this.content = '默认字体';
})
}.width('100%')
.height('100%')
.justifyContent(FlexAlign.Center)
}
}

  • 本地字体集可加载多个自定义字体,所有字体合计最大内存限制加载20MB。
  • 同一应用的所有卡片共用一个本地字体集实例。加载或卸载自定义字体后,所有卡片的字体显示会同步更新。

运行结果