1# 图标小符号 (SymbolGlyph/SymbolSpan) 2 3SymbolGlyph是图标小符号组件,便于使用精美的图标,如渲染多色图标和使用动效图标。SymbolSpan作为Text组件的子组件,可在文本中穿插显示图标小符号。具体用法请参考[SymbolGlyph](../reference/apis-arkui/arkui-ts/ts-basic-components-symbolGlyph.md)和[SymbolSpan](../reference/apis-arkui/arkui-ts/ts-basic-components-symbolSpan.md)组件的文档。 4 5 6## 创建图标 7 8SymbolGlyph通过$r引用Resource资源来创建,目前仅支持系统预置的Symbol资源名。<!--RP1--><!--RP1End--> 9 10 ```ts 11 SymbolGlyph($r('sys.symbol.ohos_folder_badge_plus')) 12 .fontSize(96) 13 .renderingStrategy(SymbolRenderingStrategy.SINGLE) 14 .fontColor([Color.Black, Color.Green, Color.White]) 15 ``` 16  17 18 19## 添加到文本中 20 21[SymbolSpan](../reference/apis-arkui/arkui-ts/ts-basic-components-symbolSpan.md)可作为[Text](../reference/apis-arkui/arkui-ts/ts-basic-components-text.md)的子组件用于显示图标小符号。可以在一个Text组件内添加多个SymbolSpan,从而展示一串连续的图标。 22 23- 创建SymbolSpan。 24 25 SymbolSpan组件必须嵌入在Text组件中才能显示,单独的SymbolSpan组件不会呈现任何内容。 26 27 28 ```ts 29 Text() { 30 SymbolSpan($r('sys.symbol.ohos_trash')) 31 .fontWeight(FontWeight.Normal) 32 .fontSize(96) 33 } 34 ``` 35  36 37 38- 通过[fontSize](../reference/apis-arkui/arkui-ts/ts-basic-components-symbolSpan.md#fontsize)属性设置SymbolSpan的大小。 39 40 41 ```ts 42 Row() { 43 Column() { 44 Text("48") 45 Text() { 46 SymbolSpan($r('sys.symbol.ohos_folder_badge_plus')) 47 .fontSize(48) 48 .renderingStrategy(SymbolRenderingStrategy.SINGLE) 49 .fontColor([Color.Black, Color.Green, Color.White]) 50 } 51 } 52 53 Column() { 54 Text("72") 55 Text() { 56 SymbolSpan($r('sys.symbol.ohos_folder_badge_plus')) 57 .fontSize(72) 58 .renderingStrategy(SymbolRenderingStrategy.SINGLE) 59 .fontColor([Color.Black, Color.Green, Color.White]) 60 } 61 } 62 63 Column() { 64 Text("96") 65 Text() { 66 SymbolSpan($r('sys.symbol.ohos_folder_badge_plus')) 67 .fontSize(96) 68 .renderingStrategy(SymbolRenderingStrategy.SINGLE) 69 .fontColor([Color.Black, Color.Green, Color.White]) 70 } 71 } 72 } 73 ``` 74  75 76- 通过[fontWeight](../reference/apis-arkui/arkui-ts/ts-basic-components-symbolSpan.md#fontweight)属性设置SymbolSpan组件的粗细。 77 78 ```ts 79 Row() { 80 Column() { 81 Text("Light") 82 Text() { 83 SymbolSpan($r('sys.symbol.ohos_trash')) 84 .fontWeight(FontWeight.Lighter) 85 .fontSize(96) 86 } 87 } 88 89 Column() { 90 Text("Normal") 91 Text() { 92 SymbolSpan($r('sys.symbol.ohos_trash')) 93 .fontWeight(FontWeight.Normal) 94 .fontSize(96) 95 } 96 } 97 98 Column() { 99 Text("Bold") 100 Text() { 101 SymbolSpan($r('sys.symbol.ohos_trash')) 102 .fontWeight(FontWeight.Bold) 103 .fontSize(96) 104 } 105 } 106 } 107 ``` 108  109 110- 通过[fontColor](../reference/apis-arkui/arkui-ts/ts-basic-components-symbolSpan.md#fontcolor)属性设置SymbolSpan的颜色。 111 112 ```ts 113 Row() { 114 Column() { 115 Text("Black") 116 Text() { 117 SymbolSpan($r('sys.symbol.ohos_folder_badge_plus')) 118 .fontSize(96) 119 .fontColor([Color.Black]) 120 } 121 } 122 123 Column() { 124 Text("Green") 125 Text() { 126 SymbolSpan($r('sys.symbol.ohos_folder_badge_plus')) 127 .fontSize(96) 128 .fontColor([Color.Green]) 129 } 130 } 131 132 Column() { 133 Text("Pink") 134 Text() { 135 SymbolSpan($r('sys.symbol.ohos_folder_badge_plus')) 136 .fontSize(96) 137 .fontColor([Color.Pink]) 138 } 139 } 140 } 141 ``` 142  143 144- 通过[renderingStrategy](../reference/apis-arkui/arkui-ts/ts-basic-components-symbolSpan.md#renderingstrategy)属性设置SymbolSpan的渲染策略。 145 146 ```ts 147 Row() { 148 Column() { 149 Text("单色") 150 Text() { 151 SymbolSpan($r('sys.symbol.ohos_folder_badge_plus')) 152 .fontSize(96) 153 .renderingStrategy(SymbolRenderingStrategy.SINGLE) 154 .fontColor([Color.Black, Color.Green, Color.White]) 155 } 156 } 157 158 Column() { 159 Text("多色") 160 Text() { 161 SymbolSpan($r('sys.symbol.ohos_folder_badge_plus')) 162 .fontSize(96) 163 .renderingStrategy(SymbolRenderingStrategy.MULTIPLE_COLOR) 164 .fontColor([Color.Black, Color.Green, Color.White]) 165 } 166 } 167 168 Column() { 169 Text("分层") 170 Text() { 171 SymbolSpan($r('sys.symbol.ohos_folder_badge_plus')) 172 .fontSize(96) 173 .renderingStrategy(SymbolRenderingStrategy.MULTIPLE_OPACITY) 174 .fontColor([Color.Black, Color.Green, Color.White]) 175 } 176 } 177 } 178 ``` 179  180 181- 通过[effectStrategy](../reference/apis-arkui/arkui-ts/ts-basic-components-symbolSpan.md#effectstrategy)属性设置SymbolSpan的动效策略。 182 183 ```ts 184 Row() { 185 Column() { 186 Text("无动效") 187 Text() { 188 SymbolSpan($r('sys.symbol.ohos_wifi')) 189 .fontSize(96) 190 .effectStrategy(SymbolEffectStrategy.NONE) 191 } 192 } 193 194 Column() { 195 Text("整体缩放动效") 196 Text() { 197 SymbolSpan($r('sys.symbol.ohos_wifi')) 198 .fontSize(96) 199 .effectStrategy(SymbolEffectStrategy.SCALE) 200 } 201 } 202 203 Column() { 204 Text("层级动效") 205 Text() { 206 SymbolSpan($r('sys.symbol.ohos_wifi')) 207 .fontSize(96) 208 .effectStrategy(SymbolEffectStrategy.HIERARCHICAL) 209 } 210 } 211 } 212 ``` 213  214 215- SymbolSpan不支持通用事件。 216 217## 自定义图标动效 218 219相较于effectStrategy属性在启动时即触发动效,可以通过以下两种方式来控制动效的播放状态,以及选择更多样化的动效策略。 220 221关于effectStrategy属性与symbolEffect属性的多种动态属性使用及生效原则,详情请参阅[SymbolGlyph.symbolEffect](../reference/apis-arkui/arkui-ts/ts-basic-components-symbolGlyph.md#symboleffect12-1)属性的说明。 222 223- 通过设置SymbolEffect属性,可以同时配置SymbolGlyph的动效策略及其播放状态。 224 225 ```ts 226 @State isActive: boolean = true; 227 Column() { 228 Text("可变颜色动效") 229 SymbolGlyph($r('sys.symbol.ohos_wifi')) 230 .fontSize(96) 231 .symbolEffect(new HierarchicalSymbolEffect(EffectFillStyle.ITERATIVE), this.isActive) 232 Button(this.isActive ? '关闭' : '播放').onClick(() => { 233 this.isActive = !this.isActive; 234 }) 235 } 236 ``` 237  238 239- 通过设置SymbolEffect属性,可以同时指定SymbolGlyph的动画效果策略及其播放触发条件。 240 241 ```ts 242 @State triggerValueReplace: number = 0; 243 Column() { 244 Text("弹跳动效") 245 SymbolGlyph($r('sys.symbol.ellipsis_message_1')) 246 .fontSize(96) 247 .fontColor([Color.Gray]) 248 .symbolEffect(new BounceSymbolEffect(EffectScope.WHOLE, EffectDirection.UP), this.triggerValueReplace) 249 Button('trigger').onClick(() => { 250 this.triggerValueReplace = this.triggerValueReplace + 1; 251 }) 252 } 253 ``` 254  255 256 257## 添加事件 258 259SymbolGlyph组件可以添加通用事件,例如绑定[onClick](../reference/apis-arkui/arkui-ts/ts-universal-events-click.md#onclick)、[onTouch](../reference/apis-arkui/arkui-ts/ts-universal-events-touch.md#ontouch)等事件来响应操作。 260 261```ts 262@State wifiColor: ResourceColor = Color.Black; 263SymbolGlyph($r('sys.symbol.ohos_wifi')) 264 .fontSize(96) 265 .fontColor([this.wifiColor]) 266 .onClick(() => { 267 this.wifiColor = Color.Gray; 268 }) 269``` 270 271 272## 场景示例 273 274该示例通过symbolEffect、fontSize、fontColor属性展示了播放列表的效果。 275 276```ts 277// xxx.ets 278@Entry 279@Component 280struct Index { 281 @State triggerValueReplace: number = 0; 282 @State symbolSources: Resource[] = 283 [$r('sys.symbol.repeat'), $r('sys.symbol.repeat_1'), $r('sys.symbol.arrow_left_arrow_right')]; 284 @State symbolSourcesIndex: number = 0; 285 @State symbolText: string[] = ['顺序播放', '单曲循环', '随机播放']; 286 @State symbolTextIndex: number = 0; 287 @State fontColorValue: ResourceColor = Color.Grey; 288 @State fontColorValue1: ResourceColor = '#E8E8E8'; 289 290 build() { 291 Column({ space: 10 }) { 292 Row() { 293 Text() { 294 Span('当前播放列表') 295 .fontSize(20) 296 .fontWeight(FontWeight.Bolder) 297 Span('(101)') 298 } 299 } 300 301 Row() { 302 Row({ space: 5 }) { 303 SymbolGlyph(this.symbolSources[this.symbolSourcesIndex]) 304 .symbolEffect(new ReplaceSymbolEffect(EffectScope.WHOLE), this.triggerValueReplace) 305 .fontSize(20) 306 .fontColor([this.fontColorValue]) 307 Text(this.symbolText[this.symbolTextIndex]) 308 .fontColor(this.fontColorValue) 309 } 310 .onClick(() => { 311 this.symbolTextIndex++; 312 this.symbolSourcesIndex++; 313 this.triggerValueReplace++; 314 if (this.symbolSourcesIndex > (this.symbolSources.length - 1)) { 315 this.symbolSourcesIndex = 0; 316 this.triggerValueReplace = 0; 317 } 318 if (this.symbolTextIndex > (this.symbolText.length - 1)) { 319 this.symbolTextIndex = 0; 320 } 321 }) 322 .width('75%') 323 324 Row({ space: 5 }) { 325 Text() { 326 SymbolSpan($r('sys.symbol.arrow_down_circle_badge_vip_circle_filled')) 327 .fontColor([this.fontColorValue]) 328 .fontSize(20) 329 } 330 331 Text() { 332 SymbolSpan($r('sys.symbol.heart_badge_plus')) 333 .fontColor([this.fontColorValue]) 334 .fontSize(20) 335 } 336 337 Text() { 338 SymbolSpan($r('sys.symbol.ohos_trash')) 339 .fontColor([this.fontColorValue]) 340 .fontSize(20) 341 } 342 } 343 .width('25%') 344 } 345 346 Divider().width(5).color(this.fontColorValue1).width('98%') 347 Row() { 348 Row() { 349 Text("歌曲一") 350 }.width('82%') 351 352 Row({ space: 5 }) { 353 SymbolGlyph($r('sys.symbol.play_arrow_triangle_2_circlepath')) 354 .fontColor([this.fontColorValue]) 355 .fontSize(20) 356 SymbolGlyph($r('sys.symbol.trash')) 357 .fontColor([this.fontColorValue]) 358 .fontSize(20) 359 } 360 } 361 362 Divider().width(5).color(this.fontColorValue1).width('98%') 363 Row() { 364 Row() { 365 Text("歌曲二") 366 }.width('82%') 367 368 Row({ space: 5 }) { 369 SymbolGlyph($r('sys.symbol.play_arrow_triangle_2_circlepath')) 370 .fontColor([this.fontColorValue]) 371 .fontSize(20) 372 SymbolGlyph($r('sys.symbol.trash')) 373 .fontColor([this.fontColorValue]) 374 .fontSize(20) 375 } 376 } 377 378 Divider().width(5).color(this.fontColorValue1).width('98%') 379 Row() { 380 Row() { 381 Text("歌曲三") 382 }.width('82%') 383 384 Row({ space: 5 }) { 385 SymbolGlyph($r('sys.symbol.play_arrow_triangle_2_circlepath')) 386 .fontColor([this.fontColorValue]) 387 .fontSize(20) 388 SymbolGlyph($r('sys.symbol.trash')) 389 .fontColor([this.fontColorValue]) 390 .fontSize(20) 391 } 392 } 393 394 Divider().width(5).color(this.fontColorValue1).width('98%') 395 Row() { 396 Row() { 397 Text("歌曲四") 398 }.width('82%') 399 400 Row({ space: 5 }) { 401 SymbolGlyph($r('sys.symbol.play_arrow_triangle_2_circlepath')) 402 .fontColor([this.fontColorValue]) 403 .fontSize(20) 404 SymbolGlyph($r('sys.symbol.trash')) 405 .fontColor([this.fontColorValue]) 406 .fontSize(20) 407 } 408 } 409 410 Divider().width(5).color(this.fontColorValue1).width('98%') 411 Row() { 412 Row() { 413 Text("歌曲五") 414 }.width('82%') 415 416 Row({ space: 5 }) { 417 SymbolGlyph($r('sys.symbol.play_arrow_triangle_2_circlepath')) 418 .fontColor([this.fontColorValue]) 419 .fontSize(20) 420 SymbolGlyph($r('sys.symbol.trash')) 421 .fontColor([this.fontColorValue]) 422 .fontSize(20) 423 } 424 } 425 426 Divider().width(5).color(this.fontColorValue1).width('98%') 427 Row() { 428 Row() { 429 Text("歌曲六") 430 }.width('82%') 431 432 Row({ space: 5 }) { 433 SymbolGlyph($r('sys.symbol.play_arrow_triangle_2_circlepath')) 434 .fontColor([this.fontColorValue]) 435 .fontSize(20) 436 SymbolGlyph($r('sys.symbol.trash')) 437 .fontColor([this.fontColorValue]) 438 .fontSize(20) 439 } 440 } 441 442 Divider().width(5).color(this.fontColorValue1).width('98%') 443 Row() { 444 Row() { 445 Text("歌曲七") 446 }.width('82%') 447 448 Row({ space: 5 }) { 449 SymbolGlyph($r('sys.symbol.play_arrow_triangle_2_circlepath')) 450 .fontColor([this.fontColorValue]) 451 .fontSize(20) 452 SymbolGlyph($r('sys.symbol.trash')) 453 .fontColor([this.fontColorValue]) 454 .fontSize(20) 455 } 456 } 457 458 Divider().width(5).color(this.fontColorValue1).width('98%') 459 Column() { 460 Text("关闭") 461 } 462 .alignItems(HorizontalAlign.Center) 463 .width('98%') 464 } 465 .alignItems(HorizontalAlign.Start) 466 .width('100%') 467 .height(400) 468 .padding({ 469 left: 10, 470 top: 10 471 }) 472 } 473} 474``` 475 476