HarmonyOS鸿蒙NEXT中文本选择菜单代码案例
HarmonyOS鸿蒙NEXT中文本选择菜单代码案例
HarmonyOS Next应用开发案例(持续更新中……)
本案例完整代码,请访问:https://gitee.com/harmonyos-cases/cases/tree/master/CommonAppDevelopment/feature/selecttextmenu
本案例已上架 HarmonyOS NEXT 开源组件市场,如需获取或移植该案例,可安装此插件。开发者可使用插件获取鸿蒙组件,添加到业务代码中直接编译运行。
介绍
本案例拓展富文本组件文字选择菜单选项,通过富文本组件editMenuOptions属性添加自定义选择菜单,在编辑文字时选择更多选项打开额外菜单栏。
效果图预览

使用说明
- 进入主页后输入文字,长按选择文字后自动打开编辑菜单。
- 点击更多打开自定义拓展菜单。
实现思路
- 子组件 RichEditorComponent 使用富文本组件
RichEditor实现文本编辑功能。
RichEditor({ controller: this.controller })
// TODO: 知识点:富文本组件使用editMenuOptions方法配置选中菜单
// onCreateMenu对象实现按钮新增
// onMenuItemClick对象配置各按钮对应的方法
.editMenuOptions({
onCreateMenu: this.onCreatMenu, onMenuItemClick: this.onMenuItemClick
}) // 在富文本组件渲染完成后修改文字大小等基础属性
- 使用
editMenuOptions方法扩展文本选择菜单,并分别传入菜单选项onCreateMenu和点击按钮触发方法onMenuItemClick。源码参考:RichEditorComponent。
initMenuOptions() {
this.onCreatMenu = (textMenuItems: Array<TextMenuItem>) => {
if (this.menuItemsContent) {
// 循环遍历新增选项数组,传入RichEditor组件中
this.menuItemsContent.forEach((value) => {
textMenuItems.push(value);
})
}
return textMenuItems;
}
this.onMenuItemClick = (textMenuItems: TextMenuItem, textRange: TextRange) => {
// 传递当前选中的文本信息
this.selectText = this.controller.getSpans({ start: textRange.start, end: textRange.end });
// 传递当前选中的选项
this.selectMenu = textMenuItems.content.toString();
return true;
}
return false;
}
aboutToAppear(): void {
this.initMenuOptions();
}
- 父组件 SelectTextMenu 传入选项对象,传入需要新增的菜单选项,并在点击选项后获取到当前选项和当前选中的文本信息。
@Watch('selectMenuChange') @State selectMenu: string = ''; // 当前选中的按钮选项
@State selectText: Array<RichEditorTextSpanResult | RichEditorImageSpanResult> = []; // 当前选中的文本内容
// 将按钮对象TextMenuItem传入子组件
menuItemsContent: Array<TextMenuItem> = [
{
content: $r('app.string.select_text_menu_search_menu'),
id: MenuItemId.of('search'),
icon: $r("app.media.select_menu_search")
},
{
content: $r('app.string.select_text_menu_translate_menu'),
id: MenuItemId.of('translate'),
icon: $r("app.media.select_menu_translate")
},
{
content: $r('app.string.select_text_menu_share_menu'),
id: MenuItemId.of('share'),
icon: $r("app.media.select_menu_share")
},
];
// 监听到选中按钮发生改变时触发相应方法
selectMenuChange() {
promptAction.showToast({
message: $r('app.string.select_text_menu_tips')
});
}
高性能知识点
不涉及
工程结构 & 模块类型
selecttextmenu // har类型
|---component
| |---RichEditorComponent.ets // 富文本组件
|---model
| |---SelectMenuOption.ets // 富文本定义类
|---view
| |---SelectTextMenu.ets // 视图层-文本编辑页面
模块依赖
- 本实例依赖依赖 动态路由模块 来实现页面的动态加载。
参考资料
更多关于HarmonyOS鸿蒙NEXT中文本选择菜单代码案例的实战教程也可以访问 https://www.itying.com/category-93-b0.html
在HarmonyOS鸿蒙NEXT中,文本选择菜单的实现通常涉及使用Text组件和相关的交互事件处理。以下是一个简单的代码案例,展示如何在鸿蒙NEXT中实现文本选择菜单:
import { Text, TextSelection, TextSelectionMenu } from '@ohos.etstext';
class TextSelectionExample extends ets.Component {
private textRef: Text | null = null;
componentDidMount() {
if (this.textRef) {
this.textRef.setOnTextSelectionChangeListener((selection: TextSelection) => {
if (selection.getSelectedText()) {
const menu = new TextSelectionMenu();
menu.addItem('复制', () => {
// 处理复制操作
});
menu.addItem('剪切', () => {
// 处理剪切操作
});
menu.addItem('粘贴', () => {
// 处理粘贴操作
});
menu.show();
}
});
}
}
render() {
return (
<Text ref={(ref) => (this.textRef = ref)}>
这是一个示例文本,长按可以选择文本。
</Text>
);
}
}
在上述代码中,Text组件用于显示文本,TextSelection用于处理文本选择事件,TextSelectionMenu用于创建并显示文本选择菜单。当用户长按文本并选择部分内容时,会触发setOnTextSelectionChangeListener事件,随后显示包含“复制”、“剪切”和“粘贴”选项的菜单。
更多关于HarmonyOS鸿蒙NEXT中文本选择菜单代码案例的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


