HarmonyOS NEXT实战开辟:图标小符号 (SymbolGlyph/SymbolSpan)

打印 上一主题 下一主题

主题 979|帖子 979|积分 2947

SymbolGlyph是图标小符号组件,便于使用精致的图标,如渲染多色图标。
创建图标

SymbolGlyph通过引用Resource资源来创建,资源引用范例可以通过$r创建Resource范例对象。
  1. SymbolGlyph($r('sys.symbol.ohos_folder_badge_plus'))
  2.     .fontSize(96)
  3.     .renderingStrategy(SymbolRenderingStrategy.SINGLE)
  4.     .fontColor([Color.Black, Color.Green, Color.White])
复制代码


添加到文本中

SymbolSpan能作为Text的子组件显示图标小符号。可以在一个Text内添加多个SymbolSpan来显示一串图标。


  • 创建SymbolSpan。
    SymbolSpan组件需要写到Text组件内,单独的SymbolSpan组件不会显示。
    1. Text() {
    2.   SymbolSpan($r('sys.symbol.ohos_trash'))
    3.     .fontWeight(FontWeight.Normal)
    4.     .fontSize(96)
    5. }
    复制代码


  • 通过fontSize属性设置SymbolSpan的大小。
    1. Row() {
    2.   Column() {
    3.     Text("48")
    4.     Text() {
    5.       SymbolSpan($r('sys.symbol.ohos_folder_badge_plus'))
    6.         .fontSize(48)
    7.         .renderingStrategy(SymbolRenderingStrategy.SINGLE)
    8.         .fontColor([Color.Black, Color.Green, Color.White])
    9.     }
    10.   }
    11.   Column() {
    12.     Text("72")
    13.     Text() {
    14.       SymbolSpan($r('sys.symbol.ohos_folder_badge_plus'))
    15.         .fontSize(72)
    16.         .renderingStrategy(SymbolRenderingStrategy.SINGLE)
    17.         .fontColor([Color.Black, Color.Green, Color.White])
    18.     }
    19.   }
    20.   Column() {
    21.     Text("96")
    22.     Text() {
    23.       SymbolSpan($r('sys.symbol.ohos_folder_badge_plus'))
    24.         .fontSize(96)
    25.         .renderingStrategy(SymbolRenderingStrategy.SINGLE)
    26.         .fontColor([Color.Black, Color.Green, Color.White])
    27.     }
    28.   }
    29. }
    复制代码


  • 通过fontWeight属性设置SymbolSpan组件的粗细。
    1. Row() {
    2.   Column() {
    3.     Text("Light")
    4.     Text() {
    5.       SymbolSpan($r('sys.symbol.ohos_trash'))
    6.       .fontWeight(FontWeight.Lighter)
    7.       .fontSize(96)
    8.     }
    9.   }
    10.   Column() {
    11.     Text("Normal")
    12.     Text() {
    13.       SymbolSpan($r('sys.symbol.ohos_trash'))
    14.         .fontWeight(FontWeight.Normal)
    15.         .fontSize(96)
    16.     }
    17.   }
    18.   Column() {
    19.     Text("Bold")
    20.     Text() {
    21.       SymbolSpan($r('sys.symbol.ohos_trash'))
    22.         .fontWeight(FontWeight.Bold)
    23.         .fontSize(96)
    24.     }
    25.   }
    26. }
    复制代码


  • 通过fontColor属性设置SymbolSpan的颜色。
    1. Row() {
    2.   Column() {
    3.     Text("Black")
    4.     Text() {
    5.         SymbolSpan($r('sys.symbol.ohos_folder_badge_plus'))
    6.           .fontSize(96)
    7.           .fontColor([Color.Black])
    8.     }
    9.   }
    10.   Column() {
    11.     Text("Green")
    12.     Text() {
    13.       SymbolSpan($r('sys.symbol.ohos_folder_badge_plus'))
    14.         .fontSize(96)
    15.         .fontColor([Color.Green])
    16.     }
    17.   }
    18.   Column() {
    19.     Text("Pink")
    20.     Text() {
    21.       SymbolSpan($r('sys.symbol.ohos_folder_badge_plus'))
    22.         .fontSize(96)
    23.         .fontColor([Color.Pink])
    24.     }
    25.   }
    26. }
    复制代码


  • 通过renderingStrategy属性设置SymbolSpan的渲染策略。
    1. Row() {
    2.   Column() {
    3.     Text("单色")
    4.     Text() {
    5.       SymbolSpan($r('sys.symbol.ohos_folder_badge_plus'))
    6.         .fontSize(96)
    7.         .renderingStrategy(SymbolRenderingStrategy.SINGLE)
    8.         .fontColor([Color.Black, Color.Green, Color.White])
    9.     }
    10.   }
    11.   Column() {
    12.     Text("多色")
    13.     Text() {
    14.       SymbolSpan($r('sys.symbol.ohos_folder_badge_plus'))
    15.         .fontSize(96)
    16.         .renderingStrategy(SymbolRenderingStrategy.MULTIPLE_COLOR)
    17.         .fontColor([Color.Black, Color.Green, Color.White])
    18.     }
    19.   }
    20.   Column() {
    21.     Text("分层")
    22.     Text() {
    23.       SymbolSpan($r('sys.symbol.ohos_folder_badge_plus'))
    24.         .fontSize(96)
    25.         .renderingStrategy(SymbolRenderingStrategy.MULTIPLE_OPACITY)
    26.         .fontColor([Color.Black, Color.Green, Color.White])
    27.     }
    28.   }
    29. }
    复制代码


  • 通过effectStrategy属性设置SymbolSpan的动效策略。
    1. Row() {
    2.   Column() {
    3.     Text("无动效")
    4.     Text() {
    5.       SymbolSpan($r('sys.symbol.ohos_wifi'))
    6.         .fontSize(96)
    7.         .effectStrategy(SymbolEffectStrategy.NONE)
    8.     }
    9.   }
    10.   Column() {
    11.     Text("整体缩放动效")
    12.     Text() {
    13.       SymbolSpan($r('sys.symbol.ohos_wifi'))
    14.         .fontSize(96)
    15.         .effectStrategy(SymbolEffectStrategy.SCALE)
    16.     }
    17.   }
    18.   Column() {
    19.     Text("层级动效")
    20.     Text() {
    21.       SymbolSpan($r('sys.symbol.ohos_wifi'))
    22.         .fontSize(96)
    23.         .effectStrategy(SymbolEffectStrategy.HIERARCHICAL)
    24.     }
    25.   }
    26. }
    复制代码


  • SymbolSpan不支持通用变乱。
自定义图标动效

相较于effectStrategy属性启动即触发动效,可以通过以下两种方式控制动效的播放状态以及更多样的动效策略选择。
关于effectStrategy属性与symbolEffect属性多种动态属性使用生效原则,


  • 通过symbolEffect属性同时设置SymbolGlyph的动效策略及动效播放状态。
    1. @State isActive: boolean = true;
    2. Column() {
    3.   Text("可变颜色动效")
    4.   SymbolGlyph($r('sys.symbol.ohos_wifi'))
    5.     .fontSize(96)
    6.     .symbolEffect(new HierarchicalSymbolEffect(EffectFillStyle.ITERATIVE), this.isActive)
    7.   Button(this.isActive ? '关闭' : '播放').onClick(() => {
    8.     this.isActive = !this.isActive;
    9.   })
    10. }
    复制代码


  • 通过symbolEffect属性同时设置SymbolGlyph的动效策略及播放触发器。
    1. @State triggerValueReplace: number = 0;
    2. Column() {
    3.   Text("弹跳动效")
    4.   SymbolGlyph($r('sys.symbol.ellipsis_message_1'))
    5.     .fontSize(96)
    6.     .fontColor([Color.Gray])
    7.     .symbolEffect(new BounceSymbolEffect(EffectScope.WHOLE, EffectDirection.UP), this.triggerValueReplace)
    8.   Button('trigger').onClick(() => {
    9.     this.triggerValueReplace = this.triggerValueReplace + 1;
    10.   })
    11. }
    复制代码


添加变乱

SymbolGlyph组件可以添加通用变乱,例如绑定onClick、onTouch等变乱来响应操纵。
  1. @State wifiColor: ResourceColor = Color.Black;
  2. SymbolGlyph($r('sys.symbol.ohos_wifi'))
  3. .fontSize(96)
  4. .fontColor([this.wifiColor])
  5. .onClick(()=>{
  6.   this.wifiColor = Color.Gray
  7. })
复制代码


场景示例

  1. // xxx.ets
  2. @Entry
  3. @Component
  4. struct Index {
  5.   @State triggerValueReplace: number = 0;
  6.   @State symbolSources: Resource[] = [$r('sys.symbol.repeat'), $r('sys.symbol.repeat_1'), $r('sys.symbol.arrow_left_arrow_right')]
  7.   @State symbolSourcesIndex: number = 0;
  8.   @State symbolText: string[] = ['顺序播放', '单曲循环', '随机播放']
  9.   @State symbolTextIndex: number = 0;
  10.   @State fontColorValue:ResourceColor = Color.Grey;
  11.   @State fontColorValue1:ResourceColor = '#E8E8E8';
  12.   build() {
  13.     Column( { space: 10 }) {
  14.       Row() {
  15.         Text(){
  16.           Span('当前播放列表')
  17.             .fontSize(20)
  18.             .fontWeight(FontWeight.Bolder)
  19.           Span('(101)')
  20.         }
  21.       }
  22.       Row() {
  23.         Row({ space: 5 }) {
  24.           SymbolGlyph(this.symbolSources[this.symbolSourcesIndex])
  25.             .symbolEffect(new ReplaceSymbolEffect(EffectScope.WHOLE), this.triggerValueReplace)
  26.             .fontSize(20)
  27.             .fontColor([this.fontColorValue])
  28.           Text(this.symbolText[this.symbolTextIndex])
  29.             .fontColor(this.fontColorValue)
  30.         }
  31.         .onClick(()=>{
  32.           this.symbolTextIndex++;
  33.           this.symbolSourcesIndex++;
  34.           this.triggerValueReplace++;
  35.           if (this.symbolSourcesIndex > (this.symbolSources.length - 1)) {
  36.             this.symbolSourcesIndex = 0;
  37.             this.triggerValueReplace = 0;
  38.           }
  39.           if (this.symbolTextIndex > (this.symbolText.length - 1)) {
  40.             this.symbolTextIndex = 0;
  41.           }
  42.         })
  43.         .width('75%')
  44.         Row({ space: 5 }) {
  45.           Text(){
  46.             SymbolSpan($r('sys.symbol.arrow_down_circle_badge_vip_circle_filled'))
  47.               .fontColor([this.fontColorValue])
  48.               .fontSize(20)
  49.           }
  50.           Text(){
  51.             SymbolSpan($r('sys.symbol.heart_badge_plus'))
  52.               .fontColor([this.fontColorValue])
  53.               .fontSize(20)
  54.           }
  55.           Text(){
  56.             SymbolSpan($r('sys.symbol.ohos_trash'))
  57.               .fontColor([this.fontColorValue])
  58.               .fontSize(20)
  59.           }
  60.         }
  61.         .width('25%')
  62.       }
  63.       Divider().width(5).color(this.fontColorValue1).width('98%')
  64.       Row(){
  65.         Row(){
  66.           Text("歌曲一")
  67.         }.width('82%')
  68.         Row({ space: 5}) {
  69.           SymbolGlyph($r('sys.symbol.play_arrow_triangle_2_circlepath'))
  70.             .fontColor([this.fontColorValue])
  71.             .fontSize(20)
  72.           SymbolGlyph($r('sys.symbol.trash'))
  73.             .fontColor([this.fontColorValue])
  74.             .fontSize(20)
  75.         }
  76.       }
  77.       Divider().width(5).color(this.fontColorValue1).width('98%')
  78.       Row(){
  79.         Row(){
  80.           Text("歌曲二")
  81.         }.width('82%')
  82.         Row({ space: 5}) {
  83.           SymbolGlyph($r('sys.symbol.play_arrow_triangle_2_circlepath'))
  84.             .fontColor([this.fontColorValue])
  85.             .fontSize(20)
  86.           SymbolGlyph($r('sys.symbol.trash'))
  87.             .fontColor([this.fontColorValue])
  88.             .fontSize(20)
  89.         }
  90.       }
  91.       Divider().width(5).color(this.fontColorValue1).width('98%')
  92.       Row(){
  93.         Row(){
  94.           Text("歌曲三")
  95.         }.width('82%')
  96.         Row({ space: 5}) {
  97.           SymbolGlyph($r('sys.symbol.play_arrow_triangle_2_circlepath'))
  98.             .fontColor([this.fontColorValue])
  99.             .fontSize(20)
  100.           SymbolGlyph($r('sys.symbol.trash'))
  101.             .fontColor([this.fontColorValue])
  102.             .fontSize(20)
  103.         }
  104.       }
  105.       Divider().width(5).color(this.fontColorValue1).width('98%')
  106.       Row(){
  107.         Row(){
  108.           Text("歌曲四")
  109.         }.width('82%')
  110.         Row({ space: 5}) {
  111.           SymbolGlyph($r('sys.symbol.play_arrow_triangle_2_circlepath'))
  112.             .fontColor([this.fontColorValue])
  113.             .fontSize(20)
  114.           SymbolGlyph($r('sys.symbol.trash'))
  115.             .fontColor([this.fontColorValue])
  116.             .fontSize(20)
  117.         }
  118.       }
  119.       Divider().width(5).color(this.fontColorValue1).width('98%')
  120.       Row(){
  121.         Row(){
  122.           Text("歌曲五")
  123.         }.width('82%')
  124.         Row({ space: 5}) {
  125.           SymbolGlyph($r('sys.symbol.play_arrow_triangle_2_circlepath'))
  126.             .fontColor([this.fontColorValue])
  127.             .fontSize(20)
  128.           SymbolGlyph($r('sys.symbol.trash'))
  129.             .fontColor([this.fontColorValue])
  130.             .fontSize(20)
  131.         }
  132.       }
  133.       Divider().width(5).color(this.fontColorValue1).width('98%')
  134.       Row(){
  135.         Row(){
  136.           Text("歌曲六")
  137.         }.width('82%')
  138.         Row({ space: 5}) {
  139.           SymbolGlyph($r('sys.symbol.play_arrow_triangle_2_circlepath'))
  140.             .fontColor([this.fontColorValue])
  141.             .fontSize(20)
  142.           SymbolGlyph($r('sys.symbol.trash'))
  143.             .fontColor([this.fontColorValue])
  144.             .fontSize(20)
  145.         }
  146.       }
  147.       Divider().width(5).color(this.fontColorValue1).width('98%')
  148.       Row(){
  149.         Row(){
  150.           Text("歌曲七")
  151.         }.width('82%')
  152.         Row({ space: 5}) {
  153.           SymbolGlyph($r('sys.symbol.play_arrow_triangle_2_circlepath'))
  154.             .fontColor([this.fontColorValue])
  155.             .fontSize(20)
  156.           SymbolGlyph($r('sys.symbol.trash'))
  157.             .fontColor([this.fontColorValue])
  158.             .fontSize(20)
  159.         }
  160.       }
  161.       Divider().width(5).color(this.fontColorValue1).width('98%')
  162.       Column(){
  163.         Text("关闭")
  164.       }
  165.       .alignItems(HorizontalAlign.Center)
  166.       .width('98%')
  167.     }
  168.     .alignItems(HorizontalAlign.Start)
  169.     .width('100%')
  170.     .height(400)
  171.     .padding({
  172.       left:10,
  173.       top:10
  174.     })
  175.   }
  176. }
复制代码


末了

有很多小伙伴不知道学习哪些鸿蒙开辟技能?不知道需要重点把握哪些鸿蒙应用开辟知识点?而且学习时频繁踩坑,终极浪费大量时间。以是有一份实用的鸿蒙(HarmonyOS NEXT)资料用来跟着学习是非常有必要的。 
这份鸿蒙(HarmonyOS NEXT)资料包含了鸿蒙开辟必把握的焦点知识要点,内容包含了ArkTS、ArkUI开辟组件、Stage模子、多端部署、分布式应用开辟、音频、视频、WebGL、OpenHarmony多媒体技能、Napi组件、OpenHarmony内核、OpenHarmony南向开辟、鸿蒙项目实战等等)鸿蒙(HarmonyOS NEXT)技能知识点。
希望这一份鸿蒙学习资料能够给大家带来帮助,有需要的小伙伴自行领取,限时开源,先到先得~无套路领取!!
获取这份完整版高清学习路线,请点击→纯血版全套鸿蒙HarmonyOS NEXT学习资料
鸿蒙(HarmonyOS NEXT)最新学习路线




  •  HarmonOS基础技能



  • HarmonOS就业必备技能 

  •  HarmonOS多媒体技能



  • 鸿蒙NaPi组件进阶



  • HarmonOS高级技能



  • 初识HarmonOS内核 

  • 实战就业级装备开辟

有了路线图,怎么能没有学习资料呢,小编也预备了一份团结鸿蒙官方发布笔记整理收纳的一套体系性的鸿蒙(OpenHarmony )学习手册(共计1236页)鸿蒙(OpenHarmony )开辟入门教学视频,内容包含:ArkTS、ArkUI、Web开辟、应用模子、资源分类…等知识点。
获取以上完整版高清学习路线,请点击→纯血版全套鸿蒙HarmonyOS NEXT学习资料
《鸿蒙 (OpenHarmony)开辟入门教学视频》


《鸿蒙生态应用开辟V2.0白皮书》


《鸿蒙 (OpenHarmony)开辟基础到实战手册》

OpenHarmony北向、南向开辟情况搭建

 《鸿蒙开辟基础》



  • ArkTS语言
  • 安装DevEco Studio
  • 运用你的第一个ArkTS应用
  • ArkUI声明式UI开辟
  • .……

 《鸿蒙开辟进阶》



  • Stage模子入门
  • 网络管理
  • 数据管理
  • 电话服务
  • 分布式应用开辟
  • 通知与窗口管理
  • 多媒体技能
  • 安全技能
  • 使命管理
  • WebGL
  • 国际化开辟
  • 应用测试
  • DFX面向将来设计
  • 鸿蒙体系移植和裁剪定制
  • ……

《鸿蒙进阶实战》



  • ArkTS实践
  • UIAbility应用
  • 网络案例
  • ……

 获取以上完整鸿蒙HarmonyOS学习资料,请点击→纯血版全套鸿蒙HarmonyOS NEXT学习资料
总结

总的来说,华为鸿蒙不再兼容安卓,对中年步伐员来说是一个挑战,也是一个时机。只有积极应对变化,不绝学习和提拔自己,他们才能在这个厘革的时代中立于不败之地。 

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

来自云龙湖轮廓分明的月亮

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表