Android如何移除TextView自定义选择操作模式中的CAB菜单?
如何移除TextView自定义选择操作模式中的CAB菜单?
嘿,我来帮你搞定这个问题~你已经通过ActionMode.Callback给TextView设置了自定义上下文菜单,现在想移除这个自定义的CAB(Contextual Action Bar),有几种简单的方法:
方法一:直接阻止自定义CAB创建
最直接的方式是修改你已经写好的ActionMode.Callback,让onCreateActionMode方法返回false——这样系统就不会启动这个自定义的操作模式,自然不会显示对应的CAB菜单了。修改后的代码如下:
this.textViewTest.setCustomSelectionActionModeCallback(new ActionMode.Callback() { @Override public boolean onCreateActionMode(ActionMode mode, Menu menu) { // 返回false,直接阻止自定义CAB的创建 return false; } @Override public boolean onPrepareActionMode(ActionMode mode, Menu menu) { return false; } @Override public boolean onActionItemClicked(ActionMode mode, MenuItem item) { return false; } @Override public void onDestroyActionMode(ActionMode mode) { // 空实现即可,无需额外操作 } });
方法二:运行时动态关闭已显示的CAB
如果只是想在某个特定场景下(比如用户点击了取消按钮、文本选择取消时)关闭当前显示的CAB,你需要先保留ActionMode的引用,之后调用它的finish()方法即可:
- 先定义一个全局的
ActionMode变量:
private ActionMode mActionMode;
- 在
onCreateActionMode里赋值:
@Override public boolean onCreateActionMode(ActionMode mode, Menu menu) { mActionMode = mode; // 原来的其他代码... return true; }
- 在需要关闭CAB的地方调用:
if (mActionMode != null) { mActionMode.finish(); mActionMode = null; // 避免内存泄漏 }
方法三:完全禁用TextView的文本选择功能(含系统默认CAB)
如果你想彻底让TextView不能被选中文本,连系统默认的CAB也一起去掉,可以在设置Callback的同时,给TextView设置setTextIsSelectable(false):
textViewTest.setCustomSelectionActionModeCallback(new ActionMode.Callback() { @Override public boolean onCreateActionMode(ActionMode mode, Menu menu) { return false; } @Override public boolean onPrepareActionMode(ActionMode mode, Menu menu) { return false; } @Override public boolean onActionItemClicked(ActionMode mode, MenuItem item) { return false; } @Override public void onDestroyActionMode(ActionMode mode) { } }); // 禁用TextView的文本选择功能 textViewTest.setTextIsSelectable(false);
这样就能完全杜绝任何选择操作模式的出现啦~
内容的提问来源于stack exchange,提问作者March3April4
相关产品推荐
相关产品推荐

