# Class (TextMenuController)
提供控制文本菜单的能力。
> **说明:**
>
> - 本模块首批接口从API version 10开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。
>
> - 本Class首批接口从API version 16开始支持。
>
> - 以下非静态API需先使用UIContext中的[getTextMenuController()](arkts-apis-uicontext-uicontext.md#gettextmenucontroller16)方法获取TextMenuController实例,再通过此实例调用对应方法。
## setMenuOptions16+
setMenuOptions(options: TextMenuOptions): void
设置菜单选项。
**原子化服务API:** 从API version 16开始,该接口支持在原子化服务中使用。
**系统能力:** SystemCapability.ArkUI.ArkUI.Full
**参数:**
| 参数名 | 类型 | 必填 | 说明 |
| -------- | ---------- | ---- | ---- |
| options | [TextMenuOptions](../apis-arkui/arkui-ts/ts-text-common.md#textmenuoptions16对象说明)| 是 | 设置菜单选项。
默认值:{showMode: TextMenuShowMode.DEFAULT} |
**示例:**
```ts
// xxx.ets
@Entry
@Component
struct Index {
aboutToAppear(): void {
// 设置在对应的UIContext下优先使用独立窗口显示文本选择菜单
this.getUIContext()
.getTextMenuController()
.setMenuOptions(
{
showMode: TextMenuShowMode.PREFER_WINDOW
}
);
}
build() {
Row() {
Column() {
TextInput({ text: "这是一个TextInput,长按弹出文本选择菜单" })
.height(60)
.fontStyle(FontStyle.Italic)
.fontWeight(FontWeight.Bold)
.textAlign(TextAlign.Center)
.caretStyle({ width: '4vp' })
Text("这是一个Text,长按弹出文本选择菜单")
.height(60)
.copyOption(CopyOptions.InApp)
.fontStyle(FontStyle.Italic)
.fontWeight(FontWeight.Bold)
.textAlign(TextAlign.Center)
}.width('100%')
}
.height('100%')
}
}
```
## disableSystemServiceMenuItems20+
static disableSystemServiceMenuItems(disable: boolean): void
屏蔽文本选择菜单内所有系统服务菜单项。
> **说明:**
>
> 此接口调用后整个应用进程都会生效。
>
> 此接口可在[UIAbility](../apis-ability-kit/js-apis-app-ability-uiAbility.md)使用。
>
> 此接口调用后将影响文本组件的接口[editMenuOptions](./arkui-ts/ts-basic-components-text.md#editmenuoptions12),其回调方法[onCreateMenu](./arkui-ts/ts-text-common.md#oncreatemenu12)的入参列表中不包含被屏蔽的菜单选项。
>
> 涉及文本选择菜单的组件有 [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)。
>
> 系统服务菜单项指除[TextMenuItemId](./arkui-ts/ts-text-common.md#textmenuitemid12)中的复制、剪切、全选、粘贴以外的菜单项。
>
> 当disableSystemServiceMenuItems与disableMenuItems同时设置时,优先生效先设置的disableSystemServiceMenuItems。
>
> 使用该接口时,全局生效,多次调用以最后一次为准。
>
> 可以通过以下三种方式恢复禁用菜单:
>
> - 仅设置disableSystemServiceMenuItems(true)禁用菜单时,设置false即可恢复禁用;
> - 仅设置disableMenuItems禁用菜单时,设置为空数组即可恢复禁用;
> - 当disableSystemServiceMenuItems与disableMenuItems同时使用时,则前者设置为false,后者设置为空数组,即可恢复禁用。
**原子化服务API:** 从API version 20开始,该接口支持在原子化服务中使用。
**系统能力:** SystemCapability.ArkUI.ArkUI.Full
**参数:**
| 参数名 | 类型 | 必填 | 说明 |
| -------- | ---------- | ---- | ---- |
| disable | boolean | 是 | 是否禁用系统服务菜单。true表示禁用,false表示不禁用。
默认值: false |
**示例:**
```ts
import { TextMenuController } from '@kit.ArkUI';
// xxx.ets
@Entry
@Component
struct Index {
aboutToAppear(): void {
// 禁用所有系统服务菜单。
TextMenuController.disableSystemServiceMenuItems(true)
}
aboutToDisappear(): void {
// 页面消失恢复系统服务菜单。
TextMenuController.disableSystemServiceMenuItems(false)
}
build() {
Row() {
Column() {
TextInput({ text: "这是一个TextInput,长按弹出文本选择菜单" })
.height(60)
.fontStyle(FontStyle.Italic)
.fontWeight(FontWeight.Bold)
.textAlign(TextAlign.Center)
.caretStyle({ width: '4vp' })
.editMenuOptions({
onCreateMenu: (menuItems: Array) => {
// menuItems不包含被屏蔽的系统菜单项。
return menuItems
},
onMenuItemClick: (menuItem: TextMenuItem, textRange: TextRange) => {
return false
}
})
}.width('100%')
}
.height('100%')
}
}
```
## disableMenuItems20+
static disableMenuItems(items: Array\): void
屏蔽文本选择菜单内指定的系统服务菜单项。
> **说明:**
>
> 此接口调用后整个应用进程都会生效。
>
> 此接口可在[UIAbility](../apis-ability-kit/js-apis-app-ability-uiAbility.md)使用。
>
> 此接口调用后将影响文本组件的接口[editMenuOptions](./arkui-ts/ts-basic-components-text.md#editmenuoptions12),其回调方法[onCreateMenu](./arkui-ts/ts-text-common.md#oncreatemenu12)的入参列表中不包含被屏蔽的菜单选项。
>
> 涉及文本选择菜单的组件有 [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)。
>
> 系统服务菜单项指除[TextMenuItemId](./arkui-ts/ts-text-common.md#textmenuitemid12)中的复制、剪切、全选、粘贴以外的菜单项。
>
> 当disableSystemServiceMenuItems与disableMenuItems同时设置时,优先生效先设置的disableSystemServiceMenuItems。
>
> 使用该接口时,全局生效,多次调用以最后一次为准。
>
> 可以通过以下三种方式恢复禁用菜单:
>
> - 仅设置disableSystemServiceMenuItems(true)禁用菜单时,设置false即可恢复禁用;
> - 仅设置disableMenuItems禁用菜单时,设置为空数组即可恢复禁用;
> - 当disableSystemServiceMenuItems与disableMenuItems同时使用时,则前者设置为false,后者设置为空数组,即可恢复禁用。
**原子化服务API:** 从API version 20开始,该接口支持在原子化服务中使用。
**系统能力:** SystemCapability.ArkUI.ArkUI.Full
**参数:**
| 参数名 | 类型 | 必填 | 说明 |
| -------- | ---------- | ---- | ---- |
| items | Array<[TextMenuItemId](./arkui-ts/ts-text-common.md#textmenuitemid12)> | 是 | 禁用菜单项的列表。
默认值: []
默认不禁用任何菜单。 |
**示例:**
```ts
import { TextMenuController } from '@kit.ArkUI';
// xxx.ets
@Entry
@Component
struct Index {
aboutToAppear(): void {
// 禁用搜索和翻译菜单。
TextMenuController.disableMenuItems([TextMenuItemId.SEARCH, TextMenuItemId.TRANSLATE])
}
aboutToDisappear(): void {
// 恢复系统服务菜单。
TextMenuController.disableMenuItems([])
}
build() {
Row() {
Column() {
TextInput({ text: "这是一个TextInput,长按弹出文本选择菜单" })
.height(60)
.fontStyle(FontStyle.Italic)
.fontWeight(FontWeight.Bold)
.textAlign(TextAlign.Center)
.caretStyle({ width: '4vp' })
.editMenuOptions({
onCreateMenu: (menuItems: Array) => {
// menuItems不包含搜索和翻译。
return menuItems;
},
onMenuItemClick: (menuItem: TextMenuItem, textRange: TextRange) => {
return false
}
})
}.width('100%')
}
.height('100%')
}
}
```