HarmonyOS 鸿蒙Next中怎么设置字体

HarmonyOS 鸿蒙Next中怎么设置字体 有字体的.ttf文件,怎么使用该字体,具体实现代码是什么。。。。。。

6 回复

【背景知识】

自定义字体是指开发者根据应用需求创建或选择的字体,通常用于实现特定的文字风格或满足独特的设计要求。当应用需要使用特定的文本样式和字符集时,可以注册并使用自定义字体进行文本渲染。

实现流程:

  • 注册自定义字体:将字体文件(如ttf、otf文件等)从应用资源注册到系统中,使得应用能够使用这些字体进行文本渲染。注册过程通常指将字体文件通过字体管理接口注册到系统字体库中,以便在应用中进行调用。
  • 使用自定义字体:在应用中显式指定使用已注册的自定义字体进行文本渲染。开发者可以根据需要选择特定的文本样式(如常规、粗体、斜体等),并将其应用到UI元素、文本控件或其他文本展示区域,以确保符合设计要求并提供一致的视觉效果。

【解决方案】

开发步骤

  1. 在工程中存放开发者自定义字体资源文件,字体资源文件可以放在resources/rawfile目录下也可以放在pages的同级目录,通过font.registerFont接口在生命周期aboutToAppear中进行自定义字体注册。关键代码如下:
aboutToAppear() {
  let font: Font = this.getUIContext().getFont()
  // 方式一:注册字魂龙腾楷书字体,familyName和familySrc都支持string
  font.registerFont({
    familyName: 'ZiHunLongTengKaiShu', // 注册的字体名称
    familySrc: '/font/ZiHunLongTengKaiShu(ShangYongXuShouQuan)-2.ttf' // font文件夹与pages目录同级
  })
  // 方式二:注册手写字体,familyName和familySrc都支持系统Resource
  font.registerFont({
    familyName: $r('app.string.font_name'), 
    familySrc: $r('app.string.font_src') // font文件夹与pages目录同级
  })
  // 方式三:注册ExtraLight字体, familySrc支持RawFile,确保将自定义字体文件放在entry/src/main/resources/rawfile目录下
  font.registerFont({
    familyName: 'SourceHanSerif-ExtraLight', 
    familySrc:  $rawfile('font/SourceHanSerif-ExtraLight.otf') // resources/rawfile目录下
  })
}

其中方式二需要在resources/base/element/string.json中定义font_name、font_src。代码如下:

{
  "string": [
    {
      "name": "font_name",
      "value": "HandwrittenFont"
    },
    {
      "name": "font_src",
      "value": "/font/AiNiZaiHuangHunRiLuoShouXieTi-2.ttf"
    }
  ]
}

说明:应用若需全局使用自定义字体,请在EntryAbility.ets文件的onWindowStageCreate生命周期中,通过windowStage.loadContent回调注册。

  2. 在文本组件中通过fontFamily属性使用自定义字体,关键代码如下:

  Text('字魂龙腾楷书')
    .align(Alignment.Center)
    .fontSize(50)
    .fontColor(Color.Blue)
    .fontFamily('ZiHunLongTengKaiShu') // 使用自定义魂龙腾楷书字体
  Text('手写字体')
    .align(Alignment.Center)
    .fontSize(50)
    .fontColor(Color.Blue)
    .fontFamily('HandwrittenFont') // 使用自定义手写字体

完整示例

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

@Entry
@Component
struct FontExample {
  @State message: string = 'Hello World';

  aboutToAppear() {
    let font: Font = this.getUIContext().getFont()
    // 注册青鸟华光简美黑字体
    font.registerFont({
      familyName: 'QingNiaoHuaGuangJianMeiHei', // 注册的字体名称
      familySrc: '/font/QingNiaoHuaGuangJianMeiHei-2.ttf' // font文件夹与pages目录同级
    })

    // 注册字魂龙腾楷书字体
    font.registerFont({
      familyName: 'ZiHunLongTengKaiShu', // 注册的字体名称
      familySrc: '/font/ZiHunLongTengKaiShu(ShangYongXuShouQuan)-2.ttf' // font文件夹与pages目录同级
    })

    // 注册手写字体
    font.registerFont({
      familyName: $r('app.string.font_name'), // 注册的字体名称
      familySrc: $r('app.string.font_src') // font文件夹与pages目录同级
    })

    // 注册ExtraLight字体
    font.registerFont({
      familyName: 'SourceHanSerif-ExtraLight', // 注册的字体名称
      familySrc:  $rawfile('font/SourceHanSerif-ExtraLight.otf') // resources/rawfile目录下
    })
  }

  build() {
    Column() {
      Text('青鸟华光简美黑')
        .align(Alignment.Center)
        .fontSize(50)
        .fontColor(Color.Blue)
        .fontFamily('QingNiaoHuaGuangJianMeiHei') // 使用青鸟华光简美黑字体
      Text('字魂龙腾楷书')
        .align(Alignment.Center)
        .fontSize(50)
        .fontColor(Color.Blue)
        .fontFamily('ZiHunLongTengKaiShu') // 使用魂龙腾楷书字体
      Text('手写字体')
        .align(Alignment.Center)
        .fontSize(50)
        .fontColor(Color.Blue)
        .fontFamily('HandwrittenFont') // 使用手写字体
      Text(this.message)
        .align(Alignment.Center)
        .fontSize(50)
        .fontColor(Color.Blue)
        .fontFamily('SourceHanSerif-ExtraLight') // 使用注册字体SourceHanSerif-ExtraLight
      Text(this.message)
        .align(Alignment.Center)
        .fontSize(50)
        .fontColor(Color.Blue)
    }
    .width('100%')
    .margin({ top: 30 })
  }
}

更多关于HarmonyOS 鸿蒙Next中怎么设置字体的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


@Entry
@Component
struct MyExtendFont {
  private uiContext: UIContext = this.getUIContext()
  @State message: string = 'Hello World'

  aboutToAppear(): void {
    this.uiContext.getFont().registerFont({
      familyName: 'MyExtendFont', // 字体名称
      familySrc: $rawfile('font/HarmonyOS_Sans_Thin.ttf') // 字体路径
    })
  }

  build() {
    Column() {
      Text(this.message)
        .align(Alignment.Center)
        .fontSize(20)
        .fontFamily('MyExtendFont')
    }
  }
}

总的来说,HarmonyOS是一款非常优秀的操作系统,期待它能在未来带给我们更多惊喜!

在HarmonyOS Next中,可通过以下方式设置字体:进入“设置” > “显示和亮度” > “字体与显示大小”,选择预设字体或点击“更多字体”下载新字体。系统支持调整字体大小与粗细,部分机型允许自定义字体文件。

在HarmonyOS Next中,可以通过以下步骤设置自定义字体(.ttf文件):

  1. 将字体文件放入工程的 resources/base/media 目录下。

  2. resources/base/element/string.json 中声明字体资源:

{
  "string": [
    {
      "name": "custom_font",
      "value": "myfont.ttf"
    }
  ]
}
  1. 在ArkUI组件中通过.fontFamily方法使用:
Text('Hello World')
  .fontFamily($r('app.string.custom_font'))

或者通过资源引用方式直接使用:

Text('Hello World')
  .fontFamily("myfont")

注意确保字体文件格式正确且路径引用无误。

回到顶部