From 7406813415debaf3ff4c3033ef0b93b1b5d53b95 Mon Sep 17 00:00:00 2001 From: kangshihui Date: Sat, 26 Jul 2025 10:15:00 +0800 Subject: [PATCH] =?UTF-8?q?=E8=A1=A5=E5=85=85=E7=A4=BA=E4=BE=8B=E4=BB=A3?= =?UTF-8?q?=E7=A0=81=20Signed-off-by:kangshihui?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Change-Id: Ibd2554e7342838aa55e1d8a5017fa81b9ae65d6c --- .../pages/14-editMenuOptions/01-textinput.ets | 70 +++++++++++++++++++ .../pages/14-editMenuOptions/02-textarea.ets | 70 +++++++++++++++++++ .../ets/pages/14-editMenuOptions/03-text.ets | 70 +++++++++++++++++++ 3 files changed, 210 insertions(+) create mode 100644 examples/TextInputComponentTest/entry/src/main/ets/pages/14-editMenuOptions/01-textinput.ets create mode 100644 examples/TextInputComponentTest/entry/src/main/ets/pages/14-editMenuOptions/02-textarea.ets create mode 100644 examples/TextInputComponentTest/entry/src/main/ets/pages/14-editMenuOptions/03-text.ets diff --git a/examples/TextInputComponentTest/entry/src/main/ets/pages/14-editMenuOptions/01-textinput.ets b/examples/TextInputComponentTest/entry/src/main/ets/pages/14-editMenuOptions/01-textinput.ets new file mode 100644 index 00000000000..473748fc195 --- /dev/null +++ b/examples/TextInputComponentTest/entry/src/main/ets/pages/14-editMenuOptions/01-textinput.ets @@ -0,0 +1,70 @@ +// xxx.ets +@Entry +@Component +struct EditMenuOptionsTextInputExample { + @State text: string = 'TextInput editMenuOptions'; + @State endIndex: number = 0; + onCreateMenu = (menuItems: Array) => { + let item1: TextMenuItem = { + content: 'create1', + icon: $r('app.media.startIcon'), + id: TextMenuItemId.of('create1'), + }; + let item2: TextMenuItem = { + content: 'create2', + id: TextMenuItemId.of('create2'), + icon: $r('app.media.startIcon'), + }; + menuItems.push(item1); + menuItems.unshift(item2); + return menuItems; + } + onMenuItemClick = (menuItem: TextMenuItem, textRange: TextRange) => { + if (menuItem.id.equals(TextMenuItemId.of("create2"))) { + console.log("拦截 id: create2 start:" + textRange.start + "; end:" + textRange.end); + return true; + } + if (menuItem.id.equals(TextMenuItemId.of("prepare1"))) { + console.log("拦截 id: prepare1 start:" + textRange.start + "; end:" + textRange.end); + return true; + } + if (menuItem.id.equals(TextMenuItemId.COPY)) { + console.log("拦截 COPY start:" + textRange.start + "; end:" + textRange.end); + return true; + } + if (menuItem.id.equals(TextMenuItemId.SELECT_ALL)) { + console.log("不拦截 SELECT_ALL start:" + textRange.start + "; end:" + textRange.end); + return false; + } + return false; + } + onPrepareMenu = (menuItems: Array) => { + let item1: TextMenuItem = { + content: 'prepare1_' + this.endIndex, + icon: $r('app.media.startIcon'), + id: TextMenuItemId.of('prepare1'), + }; + menuItems.unshift(item1); + return menuItems; + } + @State editMenuOptions: EditMenuOptions = { + onCreateMenu: this.onCreateMenu, + onMenuItemClick: this.onMenuItemClick, + onPrepareMenu: this.onPrepareMenu + }; + + build() { + Column() { + TextInput({ text: this.text }) + .width('95%') + .height(50) + .editMenuOptions(this.editMenuOptions) + .margin({ top: 100 }) + .onTextSelectionChange((selectionStart: number, selectionEnd: number) => { + this.endIndex = selectionEnd; + }) + } + .width("90%") + .margin("5%") + } +} \ No newline at end of file diff --git a/examples/TextInputComponentTest/entry/src/main/ets/pages/14-editMenuOptions/02-textarea.ets b/examples/TextInputComponentTest/entry/src/main/ets/pages/14-editMenuOptions/02-textarea.ets new file mode 100644 index 00000000000..ccf62a7f2f1 --- /dev/null +++ b/examples/TextInputComponentTest/entry/src/main/ets/pages/14-editMenuOptions/02-textarea.ets @@ -0,0 +1,70 @@ +// xxx.ets +@Entry +@Component +struct EditMenuOptionsTextAreaExample { + @State text: string = 'TextArea editMenuOptions'; + @State endIndex: number = 0; + onCreateMenu = (menuItems: Array) => { + let item1: TextMenuItem = { + content: 'create1', + icon: $r('app.media.startIcon'), + id: TextMenuItemId.of('create1'), + }; + let item2: TextMenuItem = { + content: 'create2', + id: TextMenuItemId.of('create2'), + icon: $r('app.media.startIcon'), + }; + menuItems.push(item1); + menuItems.unshift(item2); + return menuItems; + } + onMenuItemClick = (menuItem: TextMenuItem, textRange: TextRange) => { + if (menuItem.id.equals(TextMenuItemId.of("create2"))) { + console.log("拦截 id: create2 start:" + textRange.start + "; end:" + textRange.end); + return true; + } + if (menuItem.id.equals(TextMenuItemId.of("prepare1"))) { + console.log("拦截 id: prepare1 start:" + textRange.start + "; end:" + textRange.end); + return true; + } + if (menuItem.id.equals(TextMenuItemId.COPY)) { + console.log("拦截 COPY start:" + textRange.start + "; end:" + textRange.end); + return true; + } + if (menuItem.id.equals(TextMenuItemId.SELECT_ALL)) { + console.log("不拦截 SELECT_ALL start:" + textRange.start + "; end:" + textRange.end); + return false; + } + return false; + } + onPrepareMenu = (menuItems: Array) => { + let item1: TextMenuItem = { + content: 'prepare1_' + this.endIndex, + icon: $r('app.media.startIcon'), + id: TextMenuItemId.of('prepare1'), + }; + menuItems.unshift(item1); + return menuItems; + } + @State editMenuOptions: EditMenuOptions = { + onCreateMenu: this.onCreateMenu, + onMenuItemClick: this.onMenuItemClick, + onPrepareMenu: this.onPrepareMenu + }; + + build() { + Column() { + TextArea({ text: this.text }) + .width('95%') + .height(56) + .editMenuOptions(this.editMenuOptions) + .margin({ top: 100 }) + .onTextSelectionChange((selectionStart: number, selectionEnd: number) => { + this.endIndex = selectionEnd; + }) + } + .width("90%") + .margin("5%") + } +} \ No newline at end of file diff --git a/examples/TextInputComponentTest/entry/src/main/ets/pages/14-editMenuOptions/03-text.ets b/examples/TextInputComponentTest/entry/src/main/ets/pages/14-editMenuOptions/03-text.ets new file mode 100644 index 00000000000..fdc5e9675e1 --- /dev/null +++ b/examples/TextInputComponentTest/entry/src/main/ets/pages/14-editMenuOptions/03-text.ets @@ -0,0 +1,70 @@ +// xxx.ets +@Entry +@Component +struct EditMenuOptionsTextExample { + @State text: string = 'Text editMenuOptions' + @State endIndex: number = 0; + onCreateMenu = (menuItems: Array) => { + let item1: TextMenuItem = { + content: 'create1', + icon: $r('app.media.startIcon'), + id: TextMenuItemId.of('create1'), + }; + let item2: TextMenuItem = { + content: 'create2', + id: TextMenuItemId.of('create2'), + icon: $r('app.media.startIcon'), + }; + menuItems.push(item1); + menuItems.unshift(item2); + return menuItems; + } + onMenuItemClick = (menuItem: TextMenuItem, textRange: TextRange) => { + if (menuItem.id.equals(TextMenuItemId.of("create2"))) { + console.log("拦截 id: create2 start:" + textRange.start + "; end:" + textRange.end); + return true; + } + if (menuItem.id.equals(TextMenuItemId.of("prepare1"))) { + console.log("拦截 id: prepare1 start:" + textRange.start + "; end:" + textRange.end); + return true; + } + if (menuItem.id.equals(TextMenuItemId.COPY)) { + console.log("拦截 COPY start:" + textRange.start + "; end:" + textRange.end); + return true; + } + if (menuItem.id.equals(TextMenuItemId.SELECT_ALL)) { + console.log("不拦截 SELECT_ALL start:" + textRange.start + "; end:" + textRange.end); + return false; + } + return false; + } + onPrepareMenu = (menuItems: Array) => { + let item1: TextMenuItem = { + content: 'prepare1_' + this.endIndex, + icon: $r('app.media.startIcon'), + id: TextMenuItemId.of('prepare1'), + }; + menuItems.unshift(item1); + return menuItems; + } + @State editMenuOptions: EditMenuOptions = { + onCreateMenu: this.onCreateMenu, + onMenuItemClick: this.onMenuItemClick, + onPrepareMenu: this.onPrepareMenu + }; + + build() { + Column() { + Text(this.text) + .fontSize(20) + .copyOption(CopyOptions.LocalDevice) + .editMenuOptions(this.editMenuOptions) + .margin({ top: 100 }) + .onTextSelectionChange((selectionStart: number, selectionEnd: number) => { + this.endIndex = selectionEnd; + }) + } + .width("90%") + .margin("5%") + } +} \ No newline at end of file -- Gitee