1# Class (TextMenuController) 2 3提供控制文本菜单的能力。 4 5> **说明:** 6> 7> - 本模块首批接口从API version 10开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 8> 9> - 本Class首批接口从API version 16开始支持。 10> 11> - 以下非静态API需先使用UIContext中的[getTextMenuController()](arkts-apis-uicontext-uicontext.md#gettextmenucontroller16)方法获取TextMenuController实例,再通过此实例调用对应方法。 12 13## setMenuOptions<sup>16+</sup> 14 15setMenuOptions(options: TextMenuOptions): void 16 17设置菜单选项。 18 19**原子化服务API:** 从API version 16开始,该接口支持在原子化服务中使用。 20 21**系统能力:** SystemCapability.ArkUI.ArkUI.Full 22 23**参数:** 24 25| 参数名 | 类型 | 必填 | 说明 | 26| -------- | ---------- | ---- | ---- | 27| options | [TextMenuOptions](../apis-arkui/arkui-ts/ts-text-common.md#textmenuoptions16对象说明)| 是 | 设置菜单选项。<br />默认值:{showMode: TextMenuShowMode.DEFAULT} | 28 29**示例:** 30 31```ts 32// xxx.ets 33@Entry 34@Component 35struct Index { 36 aboutToAppear(): void { 37 // 设置在对应的UIContext下优先使用独立窗口显示文本选择菜单 38 this.getUIContext() 39 .getTextMenuController() 40 .setMenuOptions( 41 { 42 showMode: TextMenuShowMode.PREFER_WINDOW 43 } 44 ); 45 } 46 47 build() { 48 Row() { 49 Column() { 50 TextInput({ text: "这是一个TextInput,长按弹出文本选择菜单" }) 51 .height(60) 52 .fontStyle(FontStyle.Italic) 53 .fontWeight(FontWeight.Bold) 54 .textAlign(TextAlign.Center) 55 .caretStyle({ width: '4vp' }) 56 57 Text("这是一个Text,长按弹出文本选择菜单") 58 .height(60) 59 .copyOption(CopyOptions.InApp) 60 .fontStyle(FontStyle.Italic) 61 .fontWeight(FontWeight.Bold) 62 .textAlign(TextAlign.Center) 63 }.width('100%') 64 } 65 .height('100%') 66 } 67} 68``` 69## disableSystemServiceMenuItems<sup>20+</sup> 70 71static disableSystemServiceMenuItems(disable: boolean): void 72 73屏蔽文本选择菜单内所有系统服务菜单项。 74 75> **说明:** 76> 77> 此接口调用后整个应用进程都会生效。 78> 79> 此接口可在[UIAbility](../apis-ability-kit/js-apis-app-ability-uiAbility.md)使用。 80> 81> 此接口调用后将影响文本组件的接口[editMenuOptions](./arkui-ts/ts-basic-components-text.md#editmenuoptions12),其回调方法[onCreateMenu](./arkui-ts/ts-text-common.md#oncreatemenu12)的入参列表中不包含被屏蔽的菜单选项。 82> 83> 涉及文本选择菜单的组件有 [Text](./arkui-ts/ts-basic-components-text.md)、[TextArea](./arkui-ts/ts-basic-components-textarea.md)、[TextInput](./arkui-ts/ts-basic-components-textinput.md)、[Search](./arkui-ts/ts-basic-components-search.md)、[RichEditor](./arkui-ts/ts-basic-components-richeditor.md)、[Web](../apis-arkweb/arkts-basic-components-web.md)。 84> 85> 系统服务菜单项指除[TextMenuItemId](./arkui-ts/ts-text-common.md#textmenuitemid12)中的复制、剪切、全选、粘贴以外的菜单项。 86> 87> 当disableSystemServiceMenuItems与disableMenuItems同时设置时,优先生效先设置的disableSystemServiceMenuItems。 88> 89> 使用该接口时,全局生效,多次调用以最后一次为准。 90> 91> 可以通过以下三种方式恢复禁用菜单: 92> 93> - 仅设置disableSystemServiceMenuItems(true)禁用菜单时,设置false即可恢复禁用; 94> - 仅设置disableMenuItems禁用菜单时,设置为空数组即可恢复禁用; 95> - 当disableSystemServiceMenuItems与disableMenuItems同时使用时,则前者设置为false,后者设置为空数组,即可恢复禁用。 96 97**原子化服务API:** 从API version 20开始,该接口支持在原子化服务中使用。 98 99**系统能力:** SystemCapability.ArkUI.ArkUI.Full 100 101**参数:** 102 103| 参数名 | 类型 | 必填 | 说明 | 104| -------- | ---------- | ---- | ---- | 105| disable | boolean | 是 | 是否禁用系统服务菜单。true表示禁用,false表示不禁用。<br />默认值: false | 106 107**示例:** 108 109```ts 110import { TextMenuController } from '@kit.ArkUI'; 111 112// xxx.ets 113@Entry 114@Component 115struct Index { 116 aboutToAppear(): void { 117 // 禁用所有系统服务菜单。 118 TextMenuController.disableSystemServiceMenuItems(true) 119 } 120 121 aboutToDisappear(): void { 122 // 页面消失恢复系统服务菜单。 123 TextMenuController.disableSystemServiceMenuItems(false) 124 } 125 126 build() { 127 Row() { 128 Column() { 129 TextInput({ text: "这是一个TextInput,长按弹出文本选择菜单" }) 130 .height(60) 131 .fontStyle(FontStyle.Italic) 132 .fontWeight(FontWeight.Bold) 133 .textAlign(TextAlign.Center) 134 .caretStyle({ width: '4vp' }) 135 .editMenuOptions({ 136 onCreateMenu: (menuItems: Array<TextMenuItem>) => { 137 // menuItems不包含被屏蔽的系统菜单项。 138 return menuItems 139 }, 140 onMenuItemClick: (menuItem: TextMenuItem, textRange: TextRange) => { 141 return false 142 } 143 }) 144 }.width('100%') 145 } 146 .height('100%') 147 } 148} 149``` 150## disableMenuItems<sup>20+</sup> 151 152static disableMenuItems(items: Array\<TextMenuItemId>): void 153 154屏蔽文本选择菜单内指定的系统服务菜单项。 155 156> **说明:** 157> 158> 此接口调用后整个应用进程都会生效。 159> 160> 此接口可在[UIAbility](../apis-ability-kit/js-apis-app-ability-uiAbility.md)使用。 161> 162> 此接口调用后将影响文本组件的接口[editMenuOptions](./arkui-ts/ts-basic-components-text.md#editmenuoptions12),其回调方法[onCreateMenu](./arkui-ts/ts-text-common.md#oncreatemenu12)的入参列表中不包含被屏蔽的菜单选项。 163> 164> 涉及文本选择菜单的组件有 [Text](./arkui-ts/ts-basic-components-text.md)、[TextArea](./arkui-ts/ts-basic-components-textarea.md)、[TextInput](./arkui-ts/ts-basic-components-textinput.md)、[Search](./arkui-ts/ts-basic-components-search.md)、[RichEditor](./arkui-ts/ts-basic-components-richeditor.md)、[Web](../apis-arkweb/arkts-basic-components-web.md)。 165> 166> 系统服务菜单项指除[TextMenuItemId](./arkui-ts/ts-text-common.md#textmenuitemid12)中的复制、剪切、全选、粘贴以外的菜单项。 167> 168> 当disableSystemServiceMenuItems与disableMenuItems同时设置时,优先生效先设置的disableSystemServiceMenuItems。 169> 170> 使用该接口时,全局生效,多次调用以最后一次为准。 171> 172> 可以通过以下三种方式恢复禁用菜单: 173> 174> - 仅设置disableSystemServiceMenuItems(true)禁用菜单时,设置false即可恢复禁用; 175> - 仅设置disableMenuItems禁用菜单时,设置为空数组即可恢复禁用; 176> - 当disableSystemServiceMenuItems与disableMenuItems同时使用时,则前者设置为false,后者设置为空数组,即可恢复禁用。 177 178**原子化服务API:** 从API version 20开始,该接口支持在原子化服务中使用。 179 180**系统能力:** SystemCapability.ArkUI.ArkUI.Full 181 182**参数:** 183 184| 参数名 | 类型 | 必填 | 说明 | 185| -------- | ---------- | ---- | ---- | 186| items | Array<[TextMenuItemId](./arkui-ts/ts-text-common.md#textmenuitemid12)> | 是 | 禁用菜单项的列表。<br />默认值: []<br />默认不禁用任何菜单。 | 187 188**示例:** 189 190```ts 191import { TextMenuController } from '@kit.ArkUI'; 192 193// xxx.ets 194@Entry 195@Component 196struct Index { 197 aboutToAppear(): void { 198 // 禁用搜索和翻译菜单。 199 TextMenuController.disableMenuItems([TextMenuItemId.SEARCH, TextMenuItemId.TRANSLATE]) 200 } 201 202 aboutToDisappear(): void { 203 // 恢复系统服务菜单。 204 TextMenuController.disableMenuItems([]) 205 } 206 207 build() { 208 Row() { 209 Column() { 210 TextInput({ text: "这是一个TextInput,长按弹出文本选择菜单" }) 211 .height(60) 212 .fontStyle(FontStyle.Italic) 213 .fontWeight(FontWeight.Bold) 214 .textAlign(TextAlign.Center) 215 .caretStyle({ width: '4vp' }) 216 .editMenuOptions({ 217 onCreateMenu: (menuItems: Array<TextMenuItem>) => { 218 // menuItems不包含搜索和翻译。 219 return menuItems; 220 }, 221 onMenuItemClick: (menuItem: TextMenuItem, textRange: TextRange) => { 222 return false 223 } 224 }) 225 }.width('100%') 226 } 227 .height('100%') 228 } 229} 230``` 231 232