1# Class (Typeface) 2 3<!--Kit: ArkGraphics 2D--> 4<!--Subsystem: Graphics--> 5<!--Owner: @hangmengxin--> 6<!--Designer: @wangyanglan--> 7<!--Tester: @nobuggers--> 8<!--Adviser: @ge-yafang--> 9 10> **说明:** 11> 12> - 本模块首批接口从API version 11开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。 13> 14> - 本模块使用屏幕物理像素单位px。 15> 16> - 本模块为单线程模型策略,需要调用方自行管理线程安全和上下文状态的切换。 17 18字体,如宋体、楷体等。 19 20## 导入模块 21 22```ts 23import { drawing } from '@kit.ArkGraphics2D'; 24``` 25 26## getFamilyName 27 28getFamilyName(): string 29 30获取字体的族名,即一套字体设计的名称。 31 32**系统能力:** SystemCapability.Graphics.Drawing 33 34**返回值:** 35 36| 类型 | 说明 | 37| ------ | -------------------- | 38| string | 返回字体的族名。 | 39 40**示例:** 41 42```ts 43import { drawing } from '@kit.ArkGraphics2D'; 44 45const font = new drawing.Font(); 46let typeface = font.getTypeface(); 47let familyName = typeface.getFamilyName(); 48``` 49 50## makeFromCurrent<sup>20+</sup> 51 52makeFromCurrent(typefaceArguments: TypefaceArguments): Typeface 53 54基于当前字体结合字体属性构造新的字体对象。 55 56**系统能力:** SystemCapability.Graphics.Drawing 57 58**参数:** 59| 参数名 | 类型 | 必填 | 说明 | 60| ----------- | ---------------------------------------- | ---- | ------------------- | 61| typefaceArguments | [TypefaceArguments](arkts-apis-graphics-drawing-TypefaceArguments.md) | 是 | 字体属性。 | 62 63**返回值:** 64 65| 类型 | 说明 | 66| ------ | -------------------- | 67| [Typeface](arkts-apis-graphics-drawing-Typeface.md) | 返回字体对象(异常情况下会返回空指针)。 | 68 69**示例:** 70 71```ts 72import { RenderNode } from '@kit.ArkUI'; 73import { drawing } from '@kit.ArkGraphics2D'; 74 75class TextRenderNode extends RenderNode { 76 async draw(context: DrawContext) { 77 const canvas = context.canvas; 78 let typeArguments = new drawing.TypefaceArguments(); 79 typeArguments.addVariation("wght", 100); 80 const myTypeFace = drawing.Typeface.makeFromFile("/system/fonts/HarmonyOS_Sans_SC.ttf"); 81 const typeFace1 = myTypeFace.makeFromCurrent(typeArguments); 82 let font = new drawing.Font(); 83 font.setTypeface(typeFace1); 84 const textBlob = drawing.TextBlob.makeFromString("Hello World", font, drawing.TextEncoding.TEXT_ENCODING_UTF8); 85 canvas.drawTextBlob(textBlob, 60, 100); 86 } 87} 88``` 89 90## makeFromFile<sup>12+</sup> 91 92static makeFromFile(filePath: string): Typeface 93 94从指定字体文件构造字体。 95 96**系统能力:** SystemCapability.Graphics.Drawing 97 98**参数:** 99 100| 参数名 | 类型 | 必填 | 说明 | 101| ----------- | ---------------------------------------- | ---- | ------------------- | 102| filePath | string | 是 | 表示字体资源存放的路径。应用沙箱路径和真实物理路径的对应关系请参考[应用沙箱路径和真实物理路径的对应关系](../../file-management/app-sandbox-directory.md#应用沙箱路径和真实物理路径的对应关系)。 | 103 104**返回值:** 105 106| 类型 | 说明 | 107| ------ | -------------------- | 108| [Typeface](arkts-apis-graphics-drawing-Typeface.md) | 返回Typeface对象。 | 109 110**错误码:** 111 112以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。 113 114| 错误码ID | 错误信息 | 115| ------- | --------------------------------------------| 116| 401 | Parameter error.Possible causes:1.Mandatory parameters are left unspecified;2.Incorrect parameter types. | 117 118**示例:** 119 120```ts 121import { RenderNode } from '@kit.ArkUI'; 122import { drawing } from '@kit.ArkGraphics2D'; 123 124class TextRenderNode extends RenderNode { 125 async draw(context: DrawContext) { 126 const canvas = context.canvas; 127 let font = new drawing.Font(); 128 let str = "/system/fonts/HarmonyOS_Sans_Italic.ttf"; 129 const mytypeface = drawing.Typeface.makeFromFile(str); 130 font.setTypeface(mytypeface); 131 const textBlob = drawing.TextBlob.makeFromString("Hello World", font, drawing.TextEncoding.TEXT_ENCODING_UTF8); 132 canvas.drawTextBlob(textBlob, 60, 100); 133 } 134} 135``` 136 137## makeFromRawFile<sup>18+</sup> 138 139static makeFromRawFile(rawfile: Resource): Typeface 140 141使用指定的字体文件构造字体,其中要求指定的字体文件需保存在应用资源文件夹的rawfile路径下。 142 143**系统能力:** SystemCapability.Graphics.Drawing 144 145**参数:** 146 147| 参数名 | 类型 | 必填 | 说明 | 148| ----------- | ---------------------------------------- | ---- | ------------------- | 149| rawfile | [Resource](../apis-arkui/arkui-ts/ts-types.md#resource) | 是 | 指定字体文件对应的资源对象。当前只支持``$rawfile``格式引用的资源对象,对应格式写为``$rawfile('filePath')``,其中filePath为指定字体文件相对于工程中resources/rawfile目录的相对路径。如将字体文件直接存放在resources/rawfile目录下,则引用格式应写为:``$rawfile('HarmonyOS_Sans_Bold.ttf')``;也可以创建子目录,将字体文件存放在resources/rawfile/ttf下,则引用格式应写为:``$rawfile('ttf/HarmonyOS_Sans_Bold.ttf')``。 | 150 151**返回值:** 152 153| 类型 | 说明 | 154| ------ | -------------------- | 155| [Typeface](arkts-apis-graphics-drawing-Typeface.md) | 返回Typeface对象(异常情况下会返回空指针)。 | 156 157**示例:** 158 159```ts 160import { RenderNode } from '@kit.ArkUI'; 161import { drawing } from '@kit.ArkGraphics2D'; 162 163class TextRenderNode extends RenderNode { 164 async draw(context: DrawContext) { 165 const canvas = context.canvas; 166 let font = new drawing.Font(); 167 const myTypeFace = drawing.Typeface.makeFromRawFile($rawfile('HarmonyOS_Sans_Bold.ttf')); 168 font.setTypeface(myTypeFace); 169 const textBlob = drawing.TextBlob.makeFromString("Hello World", font, drawing.TextEncoding.TEXT_ENCODING_UTF8); 170 canvas.drawTextBlob(textBlob, 60, 100); 171 } 172} 173 174``` 175## makeFromFileWithArguments<sup>20+</sup> 176 177static makeFromFileWithArguments(filePath: string, typefaceArguments: TypefaceArguments): Typeface 178 179根据字体文件路径和字体属性构造新的字体。 180 181**系统能力:** SystemCapability.Graphics.Drawing 182 183**参数:** 184 185| 参数名 | 类型 | 必填 | 说明 | 186| ----------- | ---------------------------------------- | ---- | ------------------- | 187| filePath | string | 是 | 表示字体资源存放的路径。应用沙箱路径和真实物理路径的对应关系请参考[应用沙箱路径和真实物理路径的对应关系](../../file-management/app-sandbox-directory.md#应用沙箱路径和真实物理路径的对应关系)。 | 188| typefaceArguments | [TypefaceArguments](arkts-apis-graphics-drawing-TypefaceArguments.md) | 是 | 表示字体属性。 | 189 190**返回值:** 191 192| 类型 | 说明 | 193| ------ | -------------------- | 194| [Typeface](arkts-apis-graphics-drawing-Typeface.md) | 返回字体对象(异常情况下会返回空指针)。 | 195 196**示例:** 197 198```ts 199import { RenderNode } from '@kit.ArkUI'; 200import { drawing } from '@kit.ArkGraphics2D'; 201 202class TextRenderNode extends RenderNode { 203 async draw(context: DrawContext) { 204 const canvas = context.canvas; 205 let font = new drawing.Font(); 206 let str = "/system/fonts/HarmonyOS_Sans_Italic.ttf"; 207 let typeFaceArgument = new drawing.TypefaceArguments(); 208 const myTypeFace = drawing.Typeface.makeFromFileWithArguments(str, typeFaceArgument); 209 font.setTypeface(myTypeFace); 210 const textBlob = drawing.TextBlob.makeFromString("Hello World", font, drawing.TextEncoding.TEXT_ENCODING_UTF8); 211 canvas.drawTextBlob(textBlob, 60, 100); 212 } 213} 214``` 215 216## makeFromRawFileWithArguments<sup>20+</sup> 217 218static makeFromRawFileWithArguments(rawfile: Resource, typefaceArguments: TypefaceArguments): Typeface 219 220使用指定的字体文件和字体属性构造字体,其中要求指定的字体文件需保存在应用资源文件夹的rawfile路径下。 221 222**系统能力:** SystemCapability.Graphics.Drawing 223 224**参数:** 225 226| 参数名 | 类型 | 必填 | 说明 | 227| ----------- | ---------------------------------------- | ---- | ------------------- | 228| rawfile | [Resource](../apis-arkui/arkui-ts/ts-types.md#resource) | 是 | 指定字体文件对应的资源对象。当前只支持``$rawfile``格式引用的资源对象,对应格式写为``$rawfile('filePath')``,其中filePath为指定字体文件相对于工程中resources/rawfile目录的相对路径。 | 229| typefaceArguments | [TypefaceArguments](arkts-apis-graphics-drawing-TypefaceArguments.md) | 是 | 表示字体属性。 | 230 231**返回值:** 232 233| 类型 | 说明 | 234| ------ | ------------------- | 235| [Typeface](arkts-apis-graphics-drawing-Typeface.md) | 返回字体对象(异常情况下会返回空指针)。 | 236 237**示例:** 238 239```ts 240import { RenderNode } from '@kit.ArkUI'; 241import { drawing } from '@kit.ArkGraphics2D'; 242 243class TextRenderNode extends RenderNode { 244 async draw(context: DrawContext) { 245 const canvas = context.canvas; 246 let font = new drawing.Font(); 247 let typeFaceArgument = new drawing.TypefaceArguments(); 248 const myTypeFace = drawing.Typeface.makeFromRawFileWithArguments($rawfile('HarmonyOS_Sans_Bold.ttf'), typeFaceArgument); 249 font.setTypeface(myTypeFace); 250 const textBlob = drawing.TextBlob.makeFromString("Hello World", font, drawing.TextEncoding.TEXT_ENCODING_UTF8); 251 canvas.drawTextBlob(textBlob, 60, 100); 252 } 253} 254```