From a2cb625f61d918255258e059f14b064c865bdc8f Mon Sep 17 00:00:00 2001 From: w00584494 Date: Wed, 30 Aug 2023 17:31:04 +0800 Subject: [PATCH] add richEditor selectionMenu and copyOption content Signed-off-by: w00584494 Change-Id: I97f43d2131c21971bcc249f0c43c1ebf87f7c057 --- .../figures/richEditorSelectionMenu.png | Bin 0 -> 34228 bytes .../ts-basic-components-richeditor.md | 390 +++++++++++++++++- 2 files changed, 386 insertions(+), 4 deletions(-) create mode 100644 zh-cn/application-dev/reference/arkui-ts/figures/richEditorSelectionMenu.png diff --git a/zh-cn/application-dev/reference/arkui-ts/figures/richEditorSelectionMenu.png b/zh-cn/application-dev/reference/arkui-ts/figures/richEditorSelectionMenu.png new file mode 100644 index 0000000000000000000000000000000000000000..65f3eed0f6d6fe979f591084ea8af69e1c82405a GIT binary patch literal 34228 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 b8QL={<(5kiJUCb%1RT;53h)XsgTVg+10+ | [CustomBuilder](ts-types.md#custombuilder8) | 设置自定义键盘。
**说明:**
当设置自定义键盘时,输入框激活后不会打开系统输入法,而是加载指定的自定义组件。
自定义键盘的高度可以通过自定义组件根节点的height属性设置,宽度不可设置,使用系统默认值。
自定义键盘采用覆盖原始界面的方式呈现,不会对应用原始界面产生压缩或者上提。
自定义键盘无法获取焦点,但是会拦截手势事件。
默认在输入控件失去焦点时,关闭自定义键盘。 | - - +| customKeyboard | [CustomBuilder](ts-types.md#custombuilder8) | 设置自定义键盘。
**说明:**
当设置自定义键盘时,输入框激活后不会打开系统输入法,而是加载指定的自定义组件。
自定义键盘的高度可以通过自定义组件根节点的height属性设置,宽度不可设置,使用系统默认值。
自定义键盘采用覆盖原始界面的方式呈现,不会对应用原始界面产生压缩或者上提。
自定义键盘无法获取焦点,但是会拦截手势事件。
默认在输入控件失去焦点时,关闭自定义键盘。 | +| bindSelectionMenu | {
spantype: [RichEditorSpanType](#richeditorspantype),
content: [CustomBuilder](ts-types.md#custombuilder8),
responseType: [ResponseType](ts-appendix-enums.md#responsetype8),
options?: [SelectionMenuOptions](#selectionmenuoptions)
} | 设置自定义选择菜单。
默认值:{
spanType: RichEditorSpanType:TEXT
responseType: ResponseType.LongPress
其他:空
}
**说明:**
当前spanType参数设置不会生效,不区分类型。| +| copyOption | [CopyOptions](ts-appendix-enums.md#copyoptions9) | 组件支持设置内容是否可复制粘贴。
默认值:CopyOptions.LocalDevice
**说明:**
设置copyOptions为CopyOptions.InApp或者CopyOptions.LocalDevice,长按组件内容,会弹出文本默认选择菜单,可选中内容并进行复制、全选操作。
设置copyOptions为CopyOptions.None,复制、剪切功能不生效。 | ## 事件 除支持[通用事件](ts-universal-events-click.md)外,还支持以下事件: @@ -100,6 +100,16 @@ Span位置信息。 | spanIndex | number | 是 | Span索引值。 | | spanRange | [number, number] | 是 | Span内容在RichEditor内的起始和结束位置。 | +## RichEditorSpanType + +Span类型信息。 + +| 名称 | 类型 | 必填 | 说明 | +| -------- | -------- | -------- | -------- | +| TEXT | number | 是 | Span为文字类型。 | +| IMAGE | number | 是 | Span为图像类型。| +| MIXED | number | 是 | Span为图文混合类型。| + ## RichEditorTextStyleResult @@ -257,6 +267,11 @@ deleteSpans(value?: RichEditorRange): void | ------ | -------- | ---- | -------------------------------------- | | value | [RichEditorRange](#richeditorrange) | 否 | 删除范围。省略时,删除所有文本和图片。| +### closeSelectionMenu + +closeSelectionMenu(): void + +关闭自定义选择菜单或系统默认选择菜单。 ## RichEditorSelection @@ -341,6 +356,15 @@ deleteSpans(value?: RichEditorRange): void | start | number | 否 | 起始位置,省略或者设置负值时表示从0开始。 | | end | number | 否 | 结束位置,省略或者超出文本范围时表示到结尾。 | +## SelectionMenuOptions + +范围信息。 + +| 名称 | 类型 | 必填 | 描述 | +| ------ | -------- | ---- | -------------------------------------- | +| onAppear | ?(() => void) | 否 | 自定义选择菜单弹出时回调。 | +| onDisappear | ?(() => void) | 否 | 自定义选择菜单关闭时回调。 | + ## 示例 @@ -538,4 +562,362 @@ struct RichEditorExample { } ``` -![customKeyboard](figures/richEditorCustomKeyboard.png) \ No newline at end of file +![customKeyboard](figures/richEditorCustomKeyboard.png) + +### 示例3 + +```ts +// xxx.ets +import pasteboard from '@ohos.pasteboard' + +@Entry +@Component +struct SelectionMenu { + @State message: string = 'Hello World' + @State textSize: number = 40 + @State sliderShow: boolean = false + @State start: number = -1 + @State end: number = -1 + @State colorTransparent: Color = Color.Transparent + controller: RichEditorController = new RichEditorController(); + options: RichEditorOptions = { controller: this.controller } + private iconArr: Array = + [$r('app.media.icon'), $r("app.media.icon"), $r('app.media.icon'), + $r("app.media.icon"), $r('app.media.icon')] + private listArr: Array<{ + imageSrc: Resource, + id: string, + label: string + }> = + [{ imageSrc: $r('sys.media.ohos_ic_public_cut'), id: '剪切', label: "Ctrl+X" }, + { imageSrc: $r('sys.media.ohos_ic_public_copy'), id: '复制', label: "Ctrl+C" }, + { imageSrc: $r('sys.media.ohos_ic_public_paste'), id: '粘贴', label: "Ctrl+V" }, + { imageSrc: $r('sys.media.ohos_ic_public_select_all'), id: '全选', label: "Ctrl+A" }, + { imageSrc: $r('sys.media.ohos_ic_public_share'), id: '分享', label: "" }, + { imageSrc: $r('sys.media.ohos_ic_public_translate_c2e'), id: '翻译', label: "" }, + { imageSrc: $r('sys.media.ohos_ic_public_search_filled'), id: '搜索', label: "" }] + @State iconBgColor: ResourceColor[] = new Array(this.iconArr.length).fill(this.colorTransparent) + @State listBgColor: ResourceColor[] = new Array(this.listArr.length).fill(this.colorTransparent) + @State iconIsFocus: boolean[] = new Array(this.iconArr.length).fill(false) + @State listIsFocus: boolean[] = new Array(this.iconArr.length).fill(false) + @State clickWeightNum: number = 0 + @State clickNum: number[] = [0, 0, 0] + + build() { + Column() { + Column() { + RichEditor(this.options) + .onReady(() => { + this.controller.addTextSpan(this.message, { style: { fontColor: Color.Orange, fontSize: 30 } }) + }) + .onSelect((value: RichEditorSelection) => { + if (value.selection == [-1. - 1]) return + [this.start, this.end] = value.selection + }) + .bindSelectionMenu(RichEditorSpanType.TEXT, this.panel(), ResponseType.LongPress, { onDisappear: () => { + this.sliderShow = false + }}) + .borderWidth(1) + .borderColor(Color.Red) + .width(200) + .height(200) + .position({ x: 150, y: 100 }) + }.width('100').backgroundColor(Color.White) + }.height('100') + } + + @Builder + panel() { + Column() { + Menu() { + MenuItem({ builder: this.iconPanel() }) + }.shadow(ShadowStyle.OUTER_DEFAULT_MD).margin({ bottom: 8 }) + + Menu() { + if (!this.sliderShow) { + MenuItem({ builder: this.listPanel() }) + } else { + MenuItem({ builder: this.sliderPanel() }) + } + } + .backgroundColor(Color.Transparent).focusable(true).shadow(ShadowStyle.OUTER_DEFAULT_MD) + } + } + + @Builder iconPanel() { + Column() { + Row({ space: 2 }) { + ForEach(this.iconArr, (item, index) => { + Flex({ justifyContent: FlexAlign.SpaceBetween, alignItems: ItemAlign.Center }) { + Image(item).fillColor($r('sys.color.ohos_id_color_primary')).width(24).height(24).focusable(true) + } + .border({ width: this.iconIsFocus[index] ? 2 : 0, color: $r('sys.color.ohos_id_color_focused_outline') }) + .borderRadius($r('sys.float.ohos_id_corner_radius_default_m')) + .width(48) + .height(48) + .focusable(true) + .focusOnTouch(true) + .onClick(() => { + if (index == 0) { + this.clickNum[0]++ + this.sliderShow = false + this.controller.updateSpanStyle({ start: this.start, end: this.end, textStyle: { + fontWeight: this.clickNum[0] % 2 !== 0 ? FontWeight.Bolder : FontWeight.Normal + } }) + } else if (index == 1) { + this.clickNum[1]++ + this.sliderShow = false + this.controller.updateSpanStyle({ start: this.start, end: this.end, textStyle: { + fontStyle: this.clickNum[1] % 2 !== 0 ? FontStyle.Italic : FontStyle.Normal + } }) + } else if (index == 2) { + this.clickNum[2]++ + this.sliderShow = false + this.controller.updateSpanStyle({ start: this.start, end: this.end, textStyle: { + decoration: { + type: this.clickNum[2] % 2 !== 0 ? TextDecorationType.Underline : TextDecorationType.None + } } }) + } else if (index == 3) { + this.sliderShow = !this.sliderShow + } else if (index == 4) { + this.sliderShow = false + } + }) + .onTouch((event: TouchEvent) => { + if (event.type === TouchType.Down) { + this.iconBgColor[index] = $r('sys.color.ohos_id_color_click_effect') + } + if (event.type === TouchType.Up) { + this.iconBgColor[index] = this.colorTransparent + } + }) + .onHover((isHover: boolean) => { + this.iconBgColor.forEach((icon, index1) => { + this.iconBgColor[index1] = this.colorTransparent + }) + isHover ? this.iconBgColor[index] = $r('sys.color.ohos_id_color_hover') : + this.listBgColor[index] = this.colorTransparent + }) + .onFocus(() => { + this.iconIsFocus[index] = true + }) + .onBlur(() => { + this.iconIsFocus[index] = false + }) + .backgroundColor(this.iconBgColor[index]) + }) + } + } + .backgroundColor(this.colorTransparent) + .borderRadius($r('sys.float.ohos_id_corner_radius_card')) + .width(256) + .height(56) + .padding(4) + } + + @Builder listPanel() { + Column() { + List({ space: 0, initialIndex: 0 }) { + ForEach(this.listArr, (item, index) => { + ListItem() { + listChild({ + item, + index, + listBgColor: $listBgColor, + colorTransparent: $colorTransparent + }) + .onClick(() => { + let sysBoard = pasteboard.getSystemPasteboard() + this.controller.closeSelectionMenu() + let pasteData = pasteboard.createData(pasteboard.MIMETYPE_TEXT_PLAIN, '') + this.controller.getSpans({ start: this.start, end: this.end }) + .forEach((item, i) => { + if ("imageStyle" in item) { + var style = item.imageStyle + let data = pasteboard.createRecord(pasteboard.MIMETYPE_PIXELMAP, item.valuePixelMap) + let prop = pasteData.getProperty() + prop.additions[i] = { 'width': style.size[0], 'height': style.size[1], 'fit': style.objectFit } + pasteData.addRecord(data) + pasteData.setProperty(prop) + } else { + let style = item.textStyle + let data = pasteboard.createRecord(pasteboard.MIMETYPE_TEXT_PLAIN, item.value) + let prop = pasteData.getProperty() + prop.additions[i] = { 'color': style.fontColor, 'size': style.fontSize, 'style': style.fontStyle, + 'weight': style.fontWeight } + pasteData.addRecord(data) + pasteData.setProperty(prop) + } + }) + switch (index) { + case 0: + this.controller.deleteSpans({ start: this.start, end: this.end }) + case 1: + sysBoard.clearData() + sysBoard.setData(pasteData).then(() => { + console.info('Succeeded in setting PasteData.'); + }).catch((err) => { + console.error('Failed to set PasteData. Cause: ' + err.message); + }) + break + case 2: + sysBoard.getData((err, data) => { + if (err) { + return + } + var count = data.getRecordCount() + for (let m = 0; m < count; m++) { + const element = data.getRecord(m); + let tex: RichEditorTextStyle = { + fontSize: 30, + fontColor: Color.Orange, + fontWeight: FontWeight.Normal + } + let im: RichEditorImageSpanStyle = { objectFit: ImageFit.Contain, size: [50, 50] } + if (data.getProperty().additions[m]) { + const entry = Object.entries(data.getProperty().additions[m]) + for (let [key, value] of entry) { + switch (key) { + case 'width': + im.size[0] = value + continue + case 'height': + im.size[1] = value + continue + case 'fit': + im.objectFit = value + continue + case 'color': + tex.fontColor = value + continue + case 'size': + tex.fontSize = value + continue + case 'style': + tex.fontStyle = value + continue + case 'weight': + tex.fontWeight = value + } + } + } + + if (element.mimeType == pasteboard.MIMETYPE_TEXT_PLAIN) { + this.controller.addTextSpan(element.plainText, + { + style: tex, + offset: this.controller.getCaretOffset() + }) + } + if (element.mimeType == pasteboard.MIMETYPE_PIXELMAP) { + this.controller.addImageSpan(element.pixelMap, + { + imageStyle: im, + offset: this.controller.getCaretOffset() + }) + } + } + }) + break + case 3: // 全选 + } + }) + } + .height(48) + .borderRadius($r('sys.float.ohos_id_corner_radius_card')) + .focusable(true) + .focusOnTouch(true) + .border({ width: this.listIsFocus[index] ? 2 : 0, color: $r('sys.color.ohos_id_color_focused_outline') }) + .onFocus(() => { + this.listIsFocus[index] = true + }) + .onBlur(() => { + this.listIsFocus[index] = false + }) + }, item => item) + } + } + .focusable(true) + .width(256) + .padding(4) + .backgroundColor(this.colorTransparent) + .borderRadius($r('sys.float.ohos_id_corner_radius_card')) + } + + @Builder sliderPanel() { + Column() { + Flex({ justifyContent: FlexAlign.SpaceBetween, alignItems: ItemAlign.Center }) { + Text('A').fontSize(15) + Slider({ value: this.textSize, step: 10, style: SliderStyle.InSet }) + .width(210) + .onChange((value: number, mode: SliderChangeMode) => { + this.textSize = value + this.controller.updateSpanStyle({ start: this.start, end: this.end, textStyle: { fontSize: this.textSize } + }) + }) + Text('A').fontSize(20).fontWeight(FontWeight.Medium) + }.borderRadius($r('sys.float.ohos_id_corner_radius_card')) + } + .backgroundColor(this.colorTransparent) + .borderRadius($r('sys.float.ohos_id_corner_radius_card')) + .padding(15) + .width(256) + .height(56) + .margin({ bottom: 8 }) + } +} + +@Component +struct listChild { + item + index + @Link listBgColor: (Resource | Color)[] + @Link colorTransparent: Resource + + build() { + Column() { + Flex({ + direction: FlexDirection.Row, justifyContent: FlexAlign.SpaceBetween, alignItems: ItemAlign.Center + }) { + Row() { + Image(this.item.imageSrc) + .width(20) + .height(20) + .margin({ right: 8 }) + .fillColor($r('sys.color.ohos_id_color_primary')) + .focusable(true) + Text('' + this.item.id) + .textAlign(TextAlign.Center) + .borderRadius(10) + .focusable(true) + .fontColor($r('sys.color.ohos_id_color_primary')) + .fontSize($r('sys.float.ohos_id_text_size_body1')) + } + + Row() { + Text('' + this.item.label) + .fontColor($r('sys.color.ohos_id_color_text_secondary')).fontSize($r('sys.float.ohos_id_text_size_body1')) + } + } + .onTouch((event: TouchEvent) => { + if (event.type === TouchType.Down) { + this.listBgColor[this.index] = $r('sys.color.ohos_id_color_click_effect') + } + if (event.type === TouchType.Up) { + this.listBgColor[this.index] = this.colorTransparent + } + }) + .onHover((isHover: boolean) => { + this.listBgColor[this.index] = isHover ? $r('sys.color.ohos_id_color_hover') : this.colorTransparent + }) + .backgroundColor(this.listBgColor[this.index]) + .padding({ right: 12, left: 12 }) + .height('48') + .focusable(true) + .borderRadius($r('sys.float.ohos_id_corner_radius_default_m')) + } + } +} +``` + +![selectionMenu](figures/richEditorSelectionMenu.png) \ No newline at end of file -- GitLab