HarmonyOS使用系统图标

news/2025/2/25 14:57:01

HarmonyOS图标符号是系统内置的一套图标资源库。开发者可以通过图标的资源名称,利用SymbolGlyph和SymbolSpan组件可以高效索引并使用相应的图标。使用HarmonyOS Symbol,开发者不仅可以轻松地通过图标名称引用图标资源,从而简化开发流程。还能够确保其应用程序在视觉上与系统的设计风格保持一致,从而提升用户界面的专业性和准确性。

对于系统资源,可以通过“$r('sys.symbol.resource_name')”的形式访问。其中,sys表示系统资源;symbol为系统图标资源类型;resource_name为资源名称。通过HarmonyOS Symbol图标网站(https://developer.huawei.com/consumer/cn/design/harmonyos-symbol/),可以轻松查看到HarmonyOS Symbol图标的资源名称。

以下是SymbolGlyph组件和SymbolSpan组件使用系统图标的示例。本节示例源码可以在“ArkUISymbolGlyphSymbolSpan”应用下找到。

1. 利用SymbolGlyph组件使用系统图标

SymbolGlyph是图标小符号组件,便于使用精美的图标,如渲染多色图标和使用动效图标。

以下是利用SymbolGlyph组件使用系统图标的例子。

// SymbolGlyph通过$r引用Resource资源来创建,目前仅支持系统预置的Symbol资源名。
// 通过fontSize属性设置SymbolGlyph的大小。
// 通过fontColor属性设置SymbolGlyph的颜色。
Row() {
  SymbolGlyph($r('sys.symbol.ohos_folder_badge_plus'))
    .fontSize(48)
    .fontColor([Color.Black])

  SymbolGlyph($r('sys.symbol.ohos_folder_badge_plus'))
    .fontSize(72)
    .fontColor([Color.Green])

  SymbolGlyph($r('sys.symbol.ohos_folder_badge_plus'))
    .fontSize(96)
    .fontColor([Color.Pink])
}

在上述例子中:

  • SymbolGlyph通过$r引用Resource资源来创建,目前仅支持系统预置的Symbol资源名。
  • 通过fontSize属性设置SymbolGlyph的大小。
  • 通过fontColor属性设置SymbolGlyph的颜色。

2. 利用SymbolSpan组件使用系统图标

SymbolSpan作为Text组件的子组件,可在文本中穿插显示图标小符号。

以下是利用SymbolSpan组件使用系统图标的例子。

// SymbolSpan可作为Text的子组件用于显示图标小符号。
// 可以在一个Text组件内添加多个SymbolSpan,从而展示一串连续的图标。
// 通过fontSize属性设置SymbolSpan的大小。
// 通过fontColor属性设置SymbolSpan的颜色。
Row() {
  Text() {
    SymbolSpan($r('sys.symbol.ohos_folder_badge_plus'))
      .fontSize(48)
      .fontColor([Color.Black])

    SymbolSpan($r('sys.symbol.ohos_folder_badge_plus'))
      .fontSize(72)
      .fontColor([Color.Green])

    SymbolSpan($r('sys.symbol.ohos_folder_badge_plus'))
      .fontSize(96)
      .fontColor([Color.Pink])
  }
}

在上述例子中:

  • SymbolSpan可作为Text的子组件用于显示图标小符号。可以在一个Text组件内添加多个SymbolSpan,从而展示一串连续的图标。
  • 通过fontSize属性设置SymbolSpan的大小。
  • 通过fontColor属性设置SymbolSpan的颜色。

3. fontWeight属性

通过fontWeight属性可以设置SymbolGlyph组件或者SymbolSpan组件的粗细,以下是一个例子。

// 通过fontWeight属性设置SymbolSpan组件的粗细。
Row() {
  Column() {
    Text("Lighter")
    Text() {
      SymbolSpan($r('sys.symbol.ohos_trash'))
        .fontWeight(FontWeight.Lighter)
        .fontSize(96)
    }
  }

  Column() {
    Text("Normal")
    Text() {
      SymbolSpan($r('sys.symbol.ohos_trash'))
        .fontWeight(FontWeight.Normal)
        .fontSize(96)
    }
  }

  Column() {
    Text("Bold")
    Text() {
      SymbolSpan($r('sys.symbol.ohos_trash'))
        .fontWeight(FontWeight.Bold)
        .fontSize(96)
    }
  }
}

在上述例子中,通过fontWeight属性设置SymbolSpan的粗细,值分别是Lighter、Normal、Bold三者之一。

4. renderingStrategy属性

通过renderingStrategy属性可以设置SymbolGlyph组件或者SymbolSpan组件的渲染策略,以下是一个例子。

// 通过renderingStrategy属性设置SymbolSpan的渲染策略。
Row() {
  Column() {
    Text("单色")
    Text() {
      SymbolSpan($r('sys.symbol.ohos_folder_badge_plus'))
        .fontSize(96)
        .renderingStrategy(SymbolRenderingStrategy.SINGLE)
        .fontColor([Color.Black, Color.Green, Color.White])
    }
  }

  Column() {
    Text("多色")
    Text() {
      SymbolSpan($r('sys.symbol.ohos_folder_badge_plus'))
        .fontSize(96)
        .renderingStrategy(SymbolRenderingStrategy.MULTIPLE_COLOR)
        .fontColor([Color.Black, Color.Green, Color.White])
    }
  }

  Column() {
    Text("分层")
    Text() {
      SymbolSpan($r('sys.symbol.ohos_folder_badge_plus'))
        .fontSize(96)
        .renderingStrategy(SymbolRenderingStrategy.MULTIPLE_OPACITY)
        .fontColor([Color.Black, Color.Green, Color.White])
    }
  }
}

在上述例子中,通过renderingStrategy属性设置SymbolSpan的渲染策略,值分别是SINGLE、MULTIPLE_COLOR、MULTIPLE_OPACITY三者之一,代表单色、多色、分层的渲染效果。

5. effectStrategy属性

通过effectStrategy属性可以设置SymbolGlyph组件或者SymbolSpan组件的动效策略,以下是一个例子。

// 通过effectStrategy属性设置SymbolSpan的动效策略。
Row() {
  Column() {
    Text("无动效")
    Text() {
      SymbolSpan($r('sys.symbol.ohos_wifi'))
        .fontSize(96)
        .effectStrategy(SymbolEffectStrategy.NONE)
    }
  }

  Column() {
    Text("整体缩放动效")
    Text() {
      SymbolSpan($r('sys.symbol.ohos_wifi'))
        .fontSize(96)
        .effectStrategy(SymbolEffectStrategy.SCALE)
    }
  }

  Column() {
    Text("层级动效")
    Text() {
      SymbolSpan($r('sys.symbol.ohos_wifi'))
        .fontSize(96)
        .effectStrategy(SymbolEffectStrategy.HIERARCHICAL)
    }
  }
}

在上述例子中,通过effectStrategy属性设置SymbolSpan的动效策略,值分别是NONE、SCALE、HIERARCHICAL三者之一,代表无动效、整体缩放动效、层级动效的渲染效果。

6. symbolEffect属性

通过symbolEffect属性可以设置SymbolGlyph组件的自定义动效策略,以下是一个例子。

@State isActive: boolean = true;

@State triggerValueReplace: number = 0;

// 通过symbolEffect属性设置自定义SymbolGlyph的动效。
Row() {
  // 通过设置symbolEffect属性,可以同时配置SymbolGlyph的动效策略及其播放状态。
  Column() {
    Text("可变颜色动效")

    SymbolGlyph($r('sys.symbol.ohos_wifi'))
      .fontSize(96)
      .symbolEffect(new HierarchicalSymbolEffect(EffectFillStyle.ITERATIVE), this.isActive)

    Button(this.isActive ? '关闭' : '播放').onClick(() => {
      this.isActive = !this.isActive;
    })
  }

  // 通过设置symbolEffect属性,可以同时指定SymbolGlyph的动效策略及其播放触发条件。
  Column() {
    Text("弹跳动效")

    SymbolGlyph($r('sys.symbol.ellipsis_message_1'))
      .fontSize(96)
      .fontColor([Color.Gray])
      .symbolEffect(new BounceSymbolEffect(EffectScope.WHOLE, EffectDirection.UP), this.triggerValueReplace)

    Button('trigger').onClick(() => {
      this.triggerValueReplace = this.triggerValueReplace + 1;
    })
  }
}

在上述例子中,通过symbolEffect属性设置SymbolGlyph的自定义动效策略,自定义的类型可以是SymbolEffect的子类,比如HierarchicalSymbolEffect或者BounceSymbolEffect等。

以下是相关HarmonyOS应用生态的相关学习资料:

  • 《跟老卫学 HarmonyOS 开发》 开源免费教程,https://github.com/waylau/harmonyos-tutorial
  • 鸿蒙 HarmonyOS 手机应用开发实战》(清华大学出版社)
  • 鸿蒙系统实战短视频 App 从 0 到 1 掌握 HarmonyOS”(https://coding.imooc.com/class/674.html)
  • 鸿蒙 HarmonyOS 应用开发入门》(清华大学出版社)
  • “2024 鸿蒙零基础快速实战 - 仿抖音 App 开发(ArkTS 版)”(https://coding.imooc.com/class/843.html)
  • 鸿蒙 HarmonyOS 应用开发从入门到精通战(第 2 版)》(北京大学出版社)
  • 鸿蒙之光 HarmonyOS NEXT 原生应用开发入门》(清华大学出版社)

http://www.niftyadmin.cn/n/5865628.html

相关文章

鸿蒙开发深入浅出03(封装通用LazyForEach实现懒加载)

鸿蒙开发深入浅出03(封装通用LazyForEach实现懒加载) 1、效果展示2、ets/models/BasicDataSource.ets3、ets/models/HomeData.ets4、ets/api/home.ets5、ets/pages/Home.ets6、ets/views/Home/SwiperLayout.ets7、后端代码 1、效果展示 2、ets/models/Ba…

bind()函数的概念和使用案例

在计算机网络编程中,bind() 是一个用于将一个套接字(socket)与一个特定的网络地址和端口号关联起来的系统调用。这个函数通常在服务器端编程中使用,用于指定服务器将监听哪个网络接口和端口号上的连接请求。 bind() 的概念 套接…

2007年诺基亚内部对iPhone的竞争分析报告

2007年iPhone发布后,诺基亚内部至少有9名员工指出其触屏界面、互联网整合能力将颠覆市场,并建议开发同类产品,但高管因当时占据全球50%市场份额而轻视威胁,认为苹果的高价和虚拟键盘会限制其普及。 诺基亚虽然意识到需推出触屏手机…

angular日历

说明: 写一个简单的日历功能 效果图: step1:C:\Users\Administrator\WebstormProjects\untitled4\src\app\calendar\calendar.component.ts import { Component, signal } from angular/core; import { CommonModule } from angular/common; import { MatButtonM…

中国的Cursor! 字节跳动推出Trae,开放Windows版(附资源),开发自己的网站,内置 GPT-4o 强大Al模型!

Trae是什么 Trae 是字节跳动推出的免费 AI IDE,通过 AI 技术提升开发效率。支持中文,集成了 Claude 3.5 和 GPT-4 等主流 AI 模型,完全免费使用。Trae 的主要功能包括 Builder 模式和 Chat 模式,其中 Builder 模式可帮助开发者从…

PostgreSQL数据库之pg_dump使用

目录 前言 1. 基础用法 1.1 备份整个数据库到 SQL 文件 2. 备份选项 2.1 仅备份结构(不包含数据) 2.2 仅备份数据(不包含表结构) 2.3 备份特定表 2.4 排除特定表 2.5 备份为自定义格式(支持压缩和快速恢复&am…

将Ubuntu操作系统的安装源设置为阿里云

在使用Ubuntu操作系统时,默认的软件源通常是国外的仓库,这可能会导致软件安装和更新速度较慢。为了提高下载速度和稳定性,我们可以将Ubuntu的安装源设置为阿里云镜像源。以下是详细步骤: 一、准备工作 在开始之前,请确保您的Ubuntu系统可以正常上网,并且您拥有管理员权…

日常知识点之刷题一

1:流浪地球 0~n-1个发动机,计划启动m次,求最后启动的发动机的个数。 以及发动机的编号。(模拟过程,每次手动启动的机器对应时间向两边扩散) //输入每个启动的时间和编号 void test_liulang() {int n, m;ci…