Android中禁用SelectAll功能疑问:两种回调为何效果不同?
问题解答
Android 里 EditText 的 ActionMode 对应两种不同的使用场景,分别由两个回调来控制:
setCustomSelectionActionModeCallback:仅负责文本被选中时的操作菜单。比如选中一段文字后弹出的复制、粘贴、全选选项,都由这个回调管控是否显示。setCustomInsertionActionModeCallback:专门处理**光标处于插入状态(无文本选中)**的场景。你长按光标出现的水滴菜单,就属于这种插入状态下的 ActionMode,里面的全选、粘贴等选项,只有通过这个回调才能干预。
你最开始只设置了 Selection 相关的回调,但长按光标触发的是 InsertionActionMode,所以你的自定义逻辑没生效,全选选项依然会显示。添加 Insertion 对应的回调后,这个场景下的菜单被你的自定义回调处理(比如你在回调里移除了全选选项,或者直接返回 false 不创建默认菜单),所以全选就不再出现了。
另外要注意,你的 actionModeCallback 应该是重写了 onCreateActionMode 或 onPrepareActionMode 方法,通过返回 false 或者移除对应菜单 item 的方式禁用功能,这样两个回调才能起到预期作用。
内容的提问来源于stack exchange,提问作者lbj
相关产品推荐
相关产品推荐

