HarmonyOS 鸿蒙Next中RichEditor实现同时设置删除线和下划线

HarmonyOS 鸿蒙Next中RichEditor实现同时设置删除线和下划线 使用RichEditorController控制器初始化的RichEditor富文本组件时,希望文本能同时设置删除线和下划线。

3 回复

【背景知识】

RichEditor支持图文混排和文本交互式编辑的组件,RichEditorController是RichEditor组件的控制器,RichEditorStyledStringController是使用属性字符串构建的RichEditor组件的控制器,均继承自RichEditorBaseController,两种控制器都可以实现同时设置删除线与下滑线。

【解决方案】

RichEditorStyledStringController实现方案可参考官网设置装饰线来实现。如果项目中是用RichEditorController来初始化RichEditor,想要实现同时设置两种装饰线,可使用fromStyledString方法将属性字符串转换为span信息,通过addTextSpan方法添加到RichEditor组件。示例代码如下:

import { LengthMetrics } from '@kit.ArkUI';

@Entry
@Component
struct RichEditorExample {
  private richEditorController: RichEditorController = new RichEditorController();
  private mutString: MutableStyledString = new MutableStyledString('设置富文本多装饰线', [
    {
      start: 0,
      length: 9,
      styledKey: StyledStringKey.FONT,
      styledValue: new TextStyle({ fontSize: LengthMetrics.vp(25) })
    },
    {
      start: 0,
      length: 5,
      styledKey: StyledStringKey.DECORATION,
      styledValue: new DecorationStyle(
        {
          type: TextDecorationType.Underline,
        },
        {
          // 开启多装饰线
          enableMultiType: true
        }
      )
    },
    {
      start: 2,
      length: 4,
      styledKey: StyledStringKey.DECORATION,
      styledValue: new DecorationStyle(
        {
          type: TextDecorationType.LineThrough,
        },
        {
          // 开启多装饰线
          enableMultiType: true
        }
      )
    },
  ])

  private isTextSpanResult(item: RichEditorImageSpanResult | RichEditorTextSpanResult): boolean {
    return typeof (item as RichEditorImageSpanResult)['imageStyle'] == 'undefined';
  }

  build() {
    Column() {
      RichEditor({ controller: this.richEditorController })
      Button("调用fromStyledString").onClick(() => {
        try {
          // 将属性字符串转换成span信息
          let spans = this.richEditorController.fromStyledString(this.mutString)
          // 通过for循环拿出属性字符串的装饰信息,添加到richEditorController
          spans.forEach((item: RichEditorTextSpanResult | RichEditorImageSpanResult, index) => {
            if (this.isTextSpanResult(item)) {
              let richSpan = item as RichEditorTextSpanResult
              this.richEditorController.addTextSpan(richSpan.value, {
                style:
                {
                  fontColor: richSpan.textStyle?.fontColor,
                  fontSize: richSpan.textStyle?.fontSize,
                  decoration: richSpan.textStyle.decoration
                }
              })
            }
          })
        } catch (error) {
          console.error('fromStyledString error')
        }
      })
    }
  }
}

更多关于HarmonyOS 鸿蒙Next中RichEditor实现同时设置删除线和下划线的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next中,RichEditor组件可通过Decoration属性实现同时设置删除线和下划线。使用TextDecoration组合样式,例如设置type: TextDecorationType.LineThrough | TextDecorationType.Underline。具体通过RichEditorControllersetDecoration方法应用,传入对应文本范围及样式参数即可完成双线效果设置。

在HarmonyOS Next的RichEditor中,可以通过组合TextDecoration样式实现同时设置删除线和下划线。具体代码如下:

// 创建文本样式
let textStyle = new TextDecoration({
  type: TextDecorationType.COMBINATION, // 组合样式
  combinations: [TextDecorationType.LINE_THROUGH, TextDecorationType.UNDERLINE]
});

// 应用样式
richEditorController.addTextStyle(textStyle);

或者使用链式调用:

richEditorController.addTextStyle(
  new TextDecoration({
    type: TextDecorationType.COMBINATION,
    combinations: [TextDecorationType.LINE_THROUGH, TextDecorationType.UNDERLINE]
  })
);

关键点:

  1. 使用TextDecorationType.COMBINATION启用组合模式
  2. combinations数组中同时包含LINE_THROUGHUNDERLINE
  3. 通过RichEditorControlleraddTextStyle方法应用样式

这样就能在选中的文本或新输入文本上同时显示删除线和下划线效果。

回到顶部