HarmonyOS 鸿蒙Next @ohos.graphics.drawing中的字形(Font)setTypeFace问题

HarmonyOS 鸿蒙Next @ohos.graphics.drawing中的字形(Font)setTypeFace问题

@ohos.graphics.drawing 中的字形(Font),setTypeFace 无法设置 rawfile 中的字体文件,也不支持 fontfamily 的形式。

有什么方式让字形设置上在 rawfile 中存储的字体。 在 CustomSpan 中, 自主在 canvas 中绘制 text, 只能使用 @ohos.graphics.drawing 的 api 进行绘制。

但是主工程的字体 ttf 文件放置在 rawfile 中, 使用例如:

font.registerFont({

familyName: FontFamily.FANG_ZHENG_CU_YUAN,

familySrc: $rawfile(‘fangzhengcuyuan.ttf’)

});

对字体进行注册, 之后 Text() 控件中使用,

Text(‘Hello’).fontFamily(FontFamily.FANG_ZHENG_CU_YUAN)

来设置字体。

但是在 @ohos.graphics.drawing 的字形中, 无法设置 fontfamily,唯一的构造方法是使用 makeFromFile 功能, 但是由于字体文件存储在 rawfile 中, 也无法找到其 path。


更多关于HarmonyOS 鸿蒙Next @ohos.graphics.drawing中的字形(Font)setTypeFace问题的实战教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复

rawfile目录没有对外暴露的路径,需要先将 .ttf 文件拷贝进应用沙箱下然后再引用 例如:

//沙箱目录

const mytypeface = drawing.Typeface.makeFromFile(getContext(this).filesDir+'/xxx.ttf');

这和设置fontfamily是两种组件形式,@ohos.graphics.drawing绘制的用法请参考

import { RenderNode } from '@kit.ArkUI';

import { drawing } from '@kit.ArkGraphics2D';

class TextRenderNode extends RenderNode {

  async draw(context: DrawContext) {

    const canvas = context.canvas;

    let font = new drawing.Font();

    let str = "/system/fonts/xxx.ttf";

    const mytypeface = drawing.Typeface.makeFromFile(str);

    font.setTypeface(mytypeface);

    const textBlob = drawing.TextBlob.makeFromString("Hello World", font, drawing.TextEncoding.TEXT_ENCODING_UTF8);

    canvas.drawTextBlob(textBlob, 60, 100);

  }

}

更多关于HarmonyOS 鸿蒙Next @ohos.graphics.drawing中的字形(Font)setTypeFace问题的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS 鸿蒙系统中,@ohos.graphics.drawing 模块下的字形(Font)对象提供了丰富的字体设置功能。针对 setTypeFace 方法,这是用于设置字体样式的一个关键接口。

setTypeFace 方法允许开发者为字体指定一个特定的 Typeface 对象,从而改变文本的字体风格(如正常、粗体、斜体等)和字体族(如衬线体、无衬线体等)。使用此方法时,需要确保传入的 Typeface 对象已正确创建,并且与当前字体环境兼容。

例如,若要将字体设置为粗体,可以首先创建一个粗体样式的 Typeface 对象,然后调用 setTypeFace 方法应用该样式:

// 假设已有一个 Font 对象 font
let typeface = new ohos.graphics.Typeface.create(ohos.graphics.Typeface.BOLD);
font.setTypeFace(typeface);

需要注意的是,setTypeFace 方法对字体的改变是即时生效的,它将直接影响后续使用此 Font 对象进行文本绘制的结果。

如果在使用 setTypeFace 方法时遇到字体无法正确应用的问题,请检查传入的 Typeface 对象是否有效,以及字体文件是否与鸿蒙系统的字体加载机制兼容。

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

回到顶部