1# 富文本(RichEditor) 2RichEditor是支持图文混排和文本交互式编辑的组件,通常用于响应用户对图文混合内容的输入操作,例如可以输入图文的评论区。具体用法参考[RichEditor](../reference/apis-arkui/arkui-ts/ts-basic-components-richeditor.md)。 3 4## 创建RichEditor组件 5开发者可以创建[不使用属性字符串](#创建不使用属性字符串构建的richeditor组件)和[使用属性字符串](#创建使用属性字符串构建的richeditor组件)构建的RichEditor组件。 6 7### 创建不使用属性字符串构建的RichEditor组件 8使用RichEditor(value: [RichEditorOptions](../reference/apis-arkui/arkui-ts/ts-basic-components-richeditor.md#richeditoroptions))接口创建非属性字符串构建的RichEditor组件,一般用于展示简单的图文信息,例如展示联系人的信息,也可以用于内容要求格式统一的场景,例如一些代码编辑器。 9 10```ts 11controller: RichEditorController = new RichEditorController(); 12options: RichEditorOptions = { controller: this.controller }; 13 14RichEditor(this.options) 15 .onReady(() => { 16 this.controller.addTextSpan('创建不使用属性字符串构建的RichEditor组件。', { 17 style: { 18 fontColor: Color.Black, 19 fontSize: 15 20 } 21 }) 22 }) 23``` 24 25 26### 创建使用属性字符串构建的RichEditor组件 27使用RichEditor(options: [RichEditorStyledStringOptions](../reference/apis-arkui/arkui-ts/ts-basic-components-richeditor.md#richeditorstyledstringoptions12))接口创建属性字符串构建的RichEditor组件,是基于属性字符串([StyledString/MutableStyledString](arkts-styled-string.md))构建的,通常应用于需要界面美化和内容强调的场景,通过设置重要功能特性文本的样式来突出显示,从而吸引用户注意。 28 29相较于不使用属性字符串构建的RichEditor组件,此种方式提供了多种文本修改方式,包括调整字号、添加字体颜色、使文本具备可点击性,以及支持自定义文本绘制等。此外,此种方式还提供了多种类型样式对象,覆盖了各种常见的文本样式格式,如文本装饰线样式、文本行高样式、文本阴影样式等。 30 31```ts 32fontStyle: TextStyle = new TextStyle({ 33 fontColor: Color.Pink 34 }); 35//自定义字体样式 36 37mutableStyledString: MutableStyledString = new MutableStyledString("创建使用属性字符串构建的RichEditor组件。", 38 [{ 39 start: 0, 40 length: 5, 41 styledKey: StyledStringKey.FONT, 42 styledValue: this.fontStyle 43 }]); 44//创建属性字符串 45 46controller: RichEditorStyledStringController = new RichEditorStyledStringController(); 47options: RichEditorStyledStringOptions = {controller: this.controller}; 48 49RichEditor(this.options) 50 .onReady(() => { 51 this.controller.setStyledString(this.mutableStyledString); 52 }) 53``` 54 55 56## 设置属性 57 58### 设置自定义选择菜单 59通过[bindSelectionMenu](../reference/apis-arkui/arkui-ts/ts-basic-components-richeditor.md#bindselectionmenu)设置自定义选择菜单。 60 61组件原本具有默认的文本选择菜单,包含复制、剪切和全选的功能。用户可使用该属性设定自定义菜单,例如翻译英文、加粗字体等丰富的菜单功能。 62 63当自定义菜单超长时,建议内部嵌套Scroll组件使用,避免键盘被遮挡。 64 65```ts 66export interface SelectionMenuTheme { 67 imageSize: number; 68 buttonSize: number; 69 menuSpacing: number; 70 editorOptionMargin: number; 71 expandedOptionPadding: number; 72 defaultMenuWidth: number; 73 imageFillColor: Resource; 74 backGroundColor: Resource; 75 iconBorderRadius: Resource; 76 containerBorderRadius: Resource; 77 cutIcon: Resource; 78 copyIcon: Resource; 79 pasteIcon: Resource; 80 selectAllIcon: Resource; 81 shareIcon: Resource; 82 translateIcon: Resource; 83 searchIcon: Resource; 84 arrowDownIcon: Resource; 85 iconPanelShadowStyle: ShadowStyle; 86 iconFocusBorderColor: Resource; 87} 88 89export const defaultTheme: SelectionMenuTheme = { 90 imageSize: 24, 91 buttonSize: 48, 92 menuSpacing: 8, 93 editorOptionMargin: 1, 94 expandedOptionPadding: 3, 95 defaultMenuWidth: 256, 96 imageFillColor: $r('sys.color.ohos_id_color_primary'), 97 backGroundColor: $r('sys.color.ohos_id_color_dialog_bg'), 98 iconBorderRadius: $r('sys.float.ohos_id_corner_radius_default_m'), 99 containerBorderRadius: $r('sys.float.ohos_id_corner_radius_card'), 100 cutIcon: $r("sys.media.ohos_ic_public_cut"), 101 copyIcon: $r("sys.media.ohos_ic_public_copy"), 102 pasteIcon: $r("sys.media.ohos_ic_public_paste"), 103 selectAllIcon: $r("sys.media.ohos_ic_public_select_all"), 104 shareIcon: $r("sys.media.ohos_ic_public_share"), 105 translateIcon: $r("sys.media.ohos_ic_public_translate_c2e"), 106 searchIcon: $r("sys.media.ohos_ic_public_search_filled"), 107 arrowDownIcon: $r("sys.media.ohos_ic_public_arrow_down"), 108 iconPanelShadowStyle: ShadowStyle.OUTER_DEFAULT_MD, 109 iconFocusBorderColor: $r('sys.color.ohos_id_color_focused_outline'), 110} 111//定义startIcon信息 112 113RichEditor(this.options) 114.onReady(() => { 115 this.controller.addTextSpan('组件设置了自定义菜单,长按可触发。', { 116 style: { 117 fontColor: Color.Black, 118 fontSize: 18 119 } 120 }) 121 }) 122 .bindSelectionMenu(RichEditorSpanType.TEXT, this.SystemMenu, ResponseType.LongPress, { 123 onDisappear: () => { 124 this.sliderShow = false 125 } 126 })//绑定自定义菜单 127 .width(300) 128 .height(300) 129 130@Builder 131 SystemMenu() { 132 Column() { 133 Menu() { 134 if (this.controller) { 135 MenuItemGroup() { 136 MenuItem({ 137 startIcon: this.theme.cutIcon, 138 content: "剪切", 139 labelInfo: "Ctrl+X", 140 }) 141 MenuItem({ 142 startIcon: this.theme.copyIcon, 143 content: "复制", 144 labelInfo: "Ctrl+C" 145 }) 146 MenuItem({ 147 startIcon: this.theme.pasteIcon, 148 content: "粘贴", 149 labelInfo: "Ctrl+V" 150 }) 151 } 152 } 153 } 154 .radius(this.theme.containerBorderRadius) 155 .clip(true) 156 .backgroundColor(Color.White) 157 .width(this.theme.defaultMenuWidth) 158 } 159 .width(this.theme.defaultMenuWidth) 160 } 161``` 162 163 164 165### 设置输入框光标、手柄颜色 166通过[caretColor](../reference/apis-arkui/arkui-ts/ts-basic-components-richeditor.md#caretcolor12)设置输入框光标、手柄颜色。 167 168设置不同颜色的光标和手柄可以提高视觉辨识度,特别是在包含多个输入区域或不同类型内容输入区域的复杂界面中,独特的光标颜色能协助用户迅速定位当前操作的输入区域。这一特性同样适用于需要标示特殊功能或状态的输入框,比如密码输入框。 169 170```ts 171RichEditor(this.options) 172 .onReady(() => { 173 this.controller.addTextSpan('组件设置了光标手柄颜色。', { 174 style: { 175 fontColor: Color.Black, 176 fontSize: 15 177 } 178 }) 179 }) 180 .caretColor(Color.Orange) 181 .width(300) 182 .height(300) 183``` 184 185 186 187### 设置无输入时的提示文本 188通过[placeholder](../reference/apis-arkui/arkui-ts/ts-basic-components-richeditor.md#placeholder12)设置无输入时的提示文本。 189 190例如,在用户登录界面采用提示文本,有助于用户区分用户名与密码的输入框。又如,在文本编辑框中,运用提示文本明确输入要求,如“限输入100字以内”,以此指导用户正确操作。 191 192```ts 193RichEditor(this.options) 194 .placeholder("此处为提示文本...", { 195 fontColor: Color.Gray, 196 font: { 197 size: 15, 198 weight: FontWeight.Normal, 199 family: "HarmonyOS Sans", 200 style: FontStyle.Normal 201 } 202 }) 203 .width(300) 204 .height(300) 205``` 206 207 208 209更多属性使用请参考[RichEditor属性](../reference/apis-arkui/arkui-ts/ts-basic-components-richeditor.md#属性)。 210 211## 添加事件 212 213### 添加组件初始化完成后可触发的回调 214通过[onReady](../reference/apis-arkui/arkui-ts/ts-basic-components-richeditor.md#onready)来添加组件初始化完成后可触发的回调。 215 216该回调可在组件初始化后,有效地展示包括图文和表情在内的丰富内容。例如,利用富文本组件展示新闻时,此回调可触发从服务器获取图文数据的操作。随后,将获取到的数据填充至组件中,确保组件在初始化完成后能够迅速在页面上呈现完整的新闻内容。 217 218```ts 219RichEditor(this.options) 220 .onReady(() => { 221 this.controller.addTextSpan('onReady回调内容是组件内预置文本。', { 222 style: { 223 fontColor: Color.Black, 224 fontSize: 15 225 } 226 }) 227 }) 228``` 229 230 231 232### 添加组件内容被选中时可触发的回调 233通过[onSelect](../reference/apis-arkui/arkui-ts/ts-basic-components-richeditor.md#onselect)来添加组件内容被选中时可触发的回调。 234 235该回调可在文本选择后增强操作体验。例如,在选中文本后,可在回调中触发弹出菜单,以便用户进行文本样式的修改。或者对选中的文本进行内容分析和处理,为用户提供输入建议,从而提升文本编辑的效率和便捷性。 236 237触发回调有两种方式:一是通过鼠标左键选择,即按下左键进行选择,然后在松开左键时触发回调。二是通过手指触摸选择,即用手指进行选择,然后在松开手指时触发回调。 238 239```ts 240RichEditor(this.options) 241 .onReady(() => { 242 this.controller.addTextSpan('选中此处文本,触发onselect回调。', { 243 style: { 244 fontColor: Color.Black, 245 fontSize: 15 246 } 247 }) 248 }) 249 .onSelect((value: RichEditorSelection) => { 250 this.controller1.addTextSpan(JSON.stringify(value), { 251 style: { 252 fontColor: Color.Gray, 253 fontSize: 10 254 } 255 }) 256 }) 257 .width(300) 258 .height(50) 259Text('查看回调内容:').fontSize(10).fontColor(Color.Gray).width(300) 260RichEditor(this.options1) 261 .width(300) 262 .height(70) 263``` 264 265 266 267### 添加图文变化前和图文变化后可触发的回调 268通过[onWillChange](../reference/apis-arkui/arkui-ts/ts-basic-components-richeditor.md#onwillchange12)添加图文变化前可触发的回调。此回调适用于用户实时数据校验与提醒,例如在用户输入文本时,可在回调内实现对输入内容的检测,若检测到敏感词汇,应立即弹出提示框。此外,它还适用于实时字数统计与限制,对于有字数限制的输入场景,可在回调中实时统计用户输入的字数,并在接近字数上限时提供相应的提示。 269 270通过[onDidChange](../reference/apis-arkui/arkui-ts/ts-basic-components-richeditor.md#ondidchange12)添加图文变化后可触发的回调。此回调适用于内容保存与同步,例如在用户完成内容编辑后,可使用该回调自动将最新内容保存至本地或同步至服务器。此外,它还适用于内容状态更新与渲染,例如在待办事项列表应用中,用户编辑富文本格式的待办事项描述后,可使用该回调更新待办事项在列表中的显示样式。 271 272使用[RichEditorStyledStringOptions](../reference/apis-arkui/arkui-ts/ts-basic-components-richeditor.md#richeditorstyledstringoptions12)构建的RichEditor组件不支持上述两种回调。 273 274```ts 275RichEditor(this.options) 276 .onReady(() => { 277 this.controller.addTextSpan('组件内图文变化前,触发回调。\n图文变化后,触发回调。', { 278 style: { 279 fontColor: Color.Black, 280 fontSize: 15 281 } 282 }) 283 }) 284 .onWillChange((value: RichEditorChangeValue) => { 285 this.controller1.addTextSpan('组件内图文变化前,触发回调:\n' + JSON.stringify(value), { 286 style: { 287 fontColor: Color.Gray, 288 fontSize: 10 289 } 290 }) 291 return true; 292 }) 293 .onDidChange((rangeBefore: TextRange, rangeAfter: TextRange) => { 294 this.controller1.addTextSpan('\n图文变化后,触发回调:\nrangeBefore:' + JSON.stringify(rangeBefore) + '\nrangeAfter:' + JSON.stringify(rangeBefore), { 295 style: { 296 fontColor: Color.Gray, 297 fontSize: 10 298 } 299 }) 300 return true; 301 }) 302 .width(300) 303 .height(50) 304Text('查看回调内容:').fontSize(10).fontColor(Color.Gray).width(300) 305RichEditor(this.options1) 306 .width(300) 307 .height(70) 308``` 309 310 311 312### 添加输入法输入内容前和完成输入后可触发的回调 313在添加输入法输入内容前,可以通过[aboutToIMEInput](../reference/apis-arkui/arkui-ts/ts-basic-components-richeditor.md#abouttoimeinput)触发回调。在输入法完成输入后,可以通过[onIMEInputComplete](../reference/apis-arkui/arkui-ts/ts-basic-components-richeditor.md#onimeinputcomplete)触发回调。 314 315这两种回调机制适用于智能输入辅助。例如:在用户开始输入文本前,利用回调进行词汇联想的提供,在用户完成输入后,利用回调执行自动化纠错或格式转换。 316 317使用[RichEditorStyledStringOptions](../reference/apis-arkui/arkui-ts/ts-basic-components-richeditor.md#richeditorstyledstringoptions12)构建的组件并不支持上述两种回调功能。 318 319```ts 320RichEditor(this.options) 321 .onReady(() => { 322 this.controller.addTextSpan('输入法输入内容前,触发回调。\n输入法完成输入后,触发回调。' , { 323 style: { 324 fontColor: Color.Black, 325 fontSize: 15 326 } 327 }) 328 }) 329 .aboutToIMEInput((value: RichEditorInsertValue) => { 330 this.controller1.addTextSpan('输入法输入内容前,触发回调:\n'+JSON.stringify(value), { 331 style: { 332 fontColor: Color.Gray, 333 fontSize: 10 334 } 335 }) 336 return true; 337 }) 338 .onIMEInputComplete((value: RichEditorTextSpanResult) => { 339 this.controller1.addTextSpan('输入法完成输入后,触发回调:\n'+ JSON.stringify(value), { 340 style: { 341 fontColor: Color.Gray, 342 fontSize: 10 343 } 344 }) 345 return true; 346 }) 347 .width(300) 348 .height(50) 349Text('查看回调内容:').fontSize(10).fontColor(Color.Gray).width(300) 350RichEditor(this.options1) 351 .width(300) 352 .height(70) 353``` 354 355 356 357### 添加完成粘贴前可触发的回调 358通过[onPaste](../reference/apis-arkui/arkui-ts/ts-basic-components-richeditor.md#onpaste11)添加完成粘贴前可触发的回调。 359 360此回调适用于内容格式的处理。例如,当用户复制包含HTML标签的文本时,可在回调中编写代码,将其转换为富文本组件所支持的格式,同时剔除不必要的标签或仅保留纯文本内容。 361 362由于组件默认的粘贴行为仅限于纯文本,无法处理图片粘贴,开发者可利用此方法实现图文并茂的粘贴功能,从而替代组件原有的粘贴行为。 363 364```ts 365RichEditor(this.options) 366 .onReady(() => { 367 this.controller.addTextSpan('对此处文本进行复制粘贴操作可触发对应回调。', { 368 style: { 369 fontColor: Color.Black, 370 fontSize: 15 371 } 372 }) 373 }) 374 .onPaste(() => { 375 this.controller1.addTextSpan('触发onPaste回调\n', { 376 style: { 377 fontColor: Color.Gray, 378 fontSize: 10 379 } 380 }) 381 }) 382 .width(300) 383 .height(70) 384``` 385 386### 添加完成剪切前可触发的回调 387通过[onCut](../reference/apis-arkui/arkui-ts/ts-basic-components-richeditor.md#oncut12)添加完成剪切前可触发的回调。 388 389此回调功能适用于数据处理与存储,例如,当用户从富文本组件中剪切内容时,可在回调中执行将被剪切的内容进行临时存储的操作,确保后续的粘贴操作能够准确无误地还原内容。 390 391由于组件默认的剪切行为仅限于纯文本,无法处理图片剪切,开发者可利用此方法实现图文并茂的剪切功能,从而替代组件原有的剪切行为。 392 393```ts 394RichEditor(this.options) 395 .onReady(() => { 396 this.controller.addTextSpan('对此处文本进行复制粘贴操作可触发对应回调。', { 397 style: { 398 fontColor: Color.Black, 399 fontSize: 15 400 } 401 }) 402 }) 403 .onCut(() => { 404 this.controller1.addTextSpan('触发onCut回调\n', { 405 style: { 406 fontColor: Color.Gray, 407 fontSize: 10 408 } 409 }) 410 }) 411 .width(300) 412 .height(70) 413``` 414 415### 添加完成复制前可触发的回调 416通过[onCopy](../reference/apis-arkui/arkui-ts/ts-basic-components-richeditor.md#oncopy12)添加完成复制前可触发的回调。 417 418此回调适用于内容的备份与共享,例如在用户复制内容时,可在回调中执行以下操作:将复制的内容及其格式信息保存至本地备份文件夹,或自动生成一段包含复制内容及产品购买链接的分享文案,以方便用户进行粘贴和分享。 419 420由于组件默认的复制行为仅限于纯文本,无法处理图片复制,开发者可利用此方法实现图文并茂的复制功能,从而替代组件原有的复制行为。 421 422```ts 423RichEditor(this.options) 424 .onReady(() => { 425 this.controller.addTextSpan('对此处文本进行复制粘贴操作可触发对应回调。', { 426 style: { 427 fontColor: Color.Black, 428 fontSize: 15 429 } 430 }) 431 }) 432 .onCopy(() => { 433 this.controller1.addTextSpan('触发onCopy回调\n', { 434 style: { 435 fontColor: Color.Gray, 436 fontSize: 10 437 } 438 }) 439 }) 440 .width(300) 441 .height(70) 442``` 443 444 445 446 447更多事件使用请参考[RichEditor事件](../reference/apis-arkui/arkui-ts/ts-basic-components-richeditor.md#事件)。 448 449## 设置用户预设的样式 450通过[setTypingStyle](../reference/apis-arkui/arkui-ts/ts-basic-components-richeditor.md#settypingstyle11)设置用户预设的样式。 451 452此接口可用于个性化的写作体验,例如可以使用此接口让输入的不同层级标题自动应用相应格式(如一级、二级标题)。 453 454```ts 455RichEditor(this.options) 456 .onReady(() => { 457 this.controller.addTextSpan('点击按钮,改变组件预设样式。', { 458 style: { 459 fontColor: Color.Black, 460 fontSize: 15 461 } 462 }) 463 }) 464 .width(300) 465 .height(60) 466Button('setTypingStyle', { 467 buttonStyle: ButtonStyleMode.NORMAL 468 }) 469 .height(30) 470 .fontSize(13) 471 .onClick(() => { 472 this.controller.setTypingStyle({ 473 fontWeight: 'medium', 474 fontColor: Color.Pink, 475 fontSize: 15, 476 fontStyle: FontStyle.Italic, 477 decoration: { 478 type: TextDecorationType.Underline, 479 color: Color.Gray 480 } 481 }) 482 }) 483``` 484 485 486 487## 设置组件内的内容选中时部分背板高亮 488通过[setSelection](../reference/apis-arkui/arkui-ts/ts-basic-components-richeditor.md#setselection11)设置组件内的内容选中时部分背板高亮。 489 490此接口可用与文本聚焦效果,例如当用户点击某个文本段落的标题或摘要时,可通过该接口自动选中并高亮出对应正文内容。 491 492当组件内未获焦出现光标时,调用该接口不产生选中效果。 493 494```ts 495RichEditor(this.options) 496 .onReady(() => { 497 this.controller.addTextSpan('点击按钮在此处选中0-2位置的文本。', { 498 style: { 499 fontColor: Color.Black, 500 fontSize: 15 501 } 502 }) 503 }) 504 .width(300) 505 .height(60) 506Button('setSelection(0,2)', { 507 buttonStyle: ButtonStyleMode.NORMAL 508 }) 509 .height(30) 510 .fontSize(13) 511 .onClick(() => { 512 this.controller.setSelection(0, 2) 513 }) 514``` 515 516 517 518## 添加文本内容 519除了直接在组件内输入内容,也可以通过[addTextSpan](../reference/apis-arkui/arkui-ts/ts-basic-components-richeditor.md#addtextspan)添加文本内容。 520 521此接口可以实现文本样式多样化,例如需要创建混合样式文本。 522 523如果组件是获焦状态,有光标在闪烁,那么通过addTextSpan添加文本内容后,光标位置会更新,在新添加文本内容的右侧闪烁。 524 525```ts 526RichEditor(this.options) 527 .onReady(() => { 528 this.controller.addTextSpan('点击按钮在此处添加text。', { 529 style: { 530 fontColor: Color.Black, 531 fontSize: 15 532 } 533 }) 534 }) 535 .width(300) 536 .height(100) 537Button('addTextSpan', { 538 buttonStyle: ButtonStyleMode.NORMAL 539 }) 540 .height(30) 541 .fontSize(13) 542 .onClick(() => { 543 this.controller.addTextSpan('新添加一段文字。') 544 }) 545``` 546 547 548 549## 添加图片内容 550通过[addImageSpan](../reference/apis-arkui/arkui-ts/ts-basic-components-richeditor.md#addimagespan)添加图片内容。 551 552此接口可用于内容丰富与可视化展示,例如在新闻中加入图片,在文档中加入数据可视化图形等。 553 554如果组件是获焦状态,有光标在闪烁,那么通过addImageSpan添加图片内容后,光标位置会更新,在新添加图片内容的右侧闪烁。 555 556```ts 557RichEditor(this.options) 558 .onReady(() => { 559 this.controller.addTextSpan('点击按钮在此处添加image。', { 560 style: { 561 fontColor: Color.Black, 562 fontSize: 15 563 } 564 }) 565 }) 566 .width(300) 567 .height(100) 568Button('addImageSpan', { 569 buttonStyle: ButtonStyleMode.NORMAL 570 }) 571 .height(30) 572 .fontSize(13) 573 .onClick(() => { 574 this.controller.addImageSpan($r("app.media.startIcon"), { 575 imageStyle: { 576 size: ["57px", "57px"] 577 } 578 }) 579 }) 580``` 581 582 583 584## 添加@Builder装饰器修饰的内容 585通过[addBuilderSpan](../reference/apis-arkui/arkui-ts/ts-basic-components-richeditor.md#addbuilderspan11)添加@Builder装饰器修饰的内容。 586 587此接口可用于自定义复杂组件的嵌入,例如在组件内加入自定义图表。 588 589该接口内可通过[RichEditorBuilderSpanOptions](../reference/apis-arkui/arkui-ts/ts-basic-components-richeditor.md#richeditorbuilderspanoptions11)设置在组件中添加builder的位置,省略或者为异常值时,则添加builder到所有内容的最后位置。 590 591```ts 592@Builder 593TextBuilder() { 594 Row() { 595 Image($r('app.media.startIcon')).width(50).height(50).margin(16) 596 Column() { 597 Text("文本文档.txt").fontWeight(FontWeight.Bold).fontSize(16) 598 Text("123.45KB").fontColor('#8a8a8a').fontSize(12) 599 }.alignItems(HorizontalAlign.Start) 600 }.backgroundColor('#f4f4f4') 601 .borderRadius("20") 602 .width(220) 603} 604 605Button('addBuilderSpan', { 606 buttonStyle: ButtonStyleMode.NORMAL 607 }) 608 .height(30) 609 .fontSize(13) 610 .onClick(() => { 611 this.my_builder = () => { 612 this.TextBuilder() 613 } 614 this.controller.addBuilderSpan(this.my_builder) 615 }) 616``` 617 618 619## 添加SymbolSpan内容 620可通过[addSymbolSpan](../reference/apis-arkui/arkui-ts/ts-basic-components-richeditor.md#addsymbolspan11)添加Symbol内容。此接口可用于特殊符号添加与展示,例如在编辑学术论文时,此接口可用于添加各种数学符号。 621 622添加Symbol内容时,如果组件内有光标闪烁,则插入Symbol后光标位置更新为新插入Symbol的右侧。 623Symbol内容暂不支持手势、复制、拖拽处理。 624 625```ts 626RichEditor(this.options) 627 .onReady(() => { 628 this.controller.addTextSpan('点击按钮在此处添加symbol。', { 629 style: { 630 fontColor: Color.Black, 631 fontSize: 15 632 } 633 }) 634 }) 635 .width(300) 636 .height(100) 637Button('addSymbolSpan', { 638 buttonStyle: ButtonStyleMode.NORMAL 639 }) 640 .height(30) 641 .fontSize(13) 642 .onClick(() => { 643 this.controller.addSymbolSpan($r("sys.symbol.basketball_fill"), { 644 style: { 645 fontSize: 30 646 } 647 }) 648 }) 649``` 650 651 652## 获取组件内图文信息 653可通过[getSpans](../reference/apis-arkui/arkui-ts/ts-basic-components-richeditor.md#getspans)获取组件内所有图文内容的信息,包括图文的内容、id、样式、位置等信息。获取内容位置信息后,可对指定范围内容进行样式的更新。 654 655此接口适用于已有的内容样式获取与检查,例如在模板应用场景下,可利用此接口获取文本样式。此外,它还适用于内容解析与处理,例如在文本分析应用中,此接口能够获取特定范围内的文本信息。 656 657```ts 658controller: RichEditorController = new RichEditorController(); 659options: RichEditorOptions = { controller: this.controller } 660controller1: RichEditorController = new RichEditorController(); 661options1: RichEditorOptions = { controller: this.controller1 } 662//定义两个富文本组件 663 664RichEditor(this.options) 665 .onReady(() => { 666 this.controller.addTextSpan('点击按钮获取此处span信息。', { 667 style: { 668 fontColor: Color.Black, 669 fontSize: 15 670 } 671 }) 672 }) 673 .width(300) 674 .height(50) 675Text('查看getSpans返回值:').fontSize(10).fontColor(Color.Gray).width(300) 676RichEditor(this.options1) 677 .width(300) 678 .height(50) 679Button('getSpans', { 680 buttonStyle: ButtonStyleMode.NORMAL 681 }) 682 .height(30) 683 .fontSize(13) 684 .onClick(() => { 685 this.controller1.addTextSpan(JSON.stringify(this.controller.getSpans()), { 686 style: { 687 fontColor: Color.Gray, 688 fontSize: 10 689 } 690 }) 691 692 }) 693``` 694 695<!--RP1--><!--RP1End-->