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