我正在寻找一种解决方案来禁用长按编辑菜单(复制/粘贴)以及双击select-all功能的edittext框。我已经以类似的方式阅读了这个问题的一些解决方案,但是,需要更进一步。
对于这个应用程序,我要求阻止用户在我的应用程序上使用复制/粘贴功能,并且需要一种方法来禁用此功能,该功能将适用于2.3 API以及在较新的平板电脑上使用时。我正在使用NexusOne手机设备和Galaxy平板电脑进行测试。 (minSDK为8,目标为10)
目前我正在使用它(例如): edittextPassword.setLongClickable(假); - 禁用弹出编辑菜单,太棒了!
此方法适用于手机设备,以防止编辑菜单弹出。在平板电脑上,这也是长按动作禁用的。然而,平板电脑具有双击的新功能,可以选择所有文本并打开编辑菜单。有没有办法让较旧的API取消/捕获/禁用较新的API功能或阻止双击手势?
更新:使用连接到GestureDetector的setLongClickable(false)和setOnTouchListener的组合(感谢Nikola的建议)我可以从打开中捕获/取消双击和长按编辑菜单。
下一部分要弄清楚这是......在三星手机上(Galaxy S,目前还不确定其他设备),当你点击一个字段时,你会得到一个光标和一个浮动光标指针按钮(正确的)名称??)。单击此指针按钮是打开编辑菜单的另一种方法。有谁知道如何禁用这个?我唯一的解决方法是使用TextWatcher清除BeforeTextChanges和AfterTextChanges上的剪贴板。这样可以确保即使您进入“复制/粘贴”菜单,也会清除剪贴板,并且无需粘贴任何内容。
答案 0 :(得分:1)
关于'浮动光标指针按钮',它被称为cursor controller, or handle,以及点击它时出现的上下文菜单,是的,有一种方法可以禁用它。我假设你是指这个:
除了setLongClickable(false)和setOnTouchListener代码之外,修复还在于防止PASTE / REPLACE菜单出现在(未记录的)android.widget.Editor
类的show()
方法中。在菜单出现之前,检查if (!canPaste && !canSuggest) return;
。用作设置这些变量的基础的两个方法都在EditText
类:
isSuggestionsEnabled()
为public
,因此可能会被覆盖。canPaste()
不是,因此必须在派生类中由introducing a function of the same name隐藏。更完整的答案是available here。
正如@CommonsWare所提到的,个别设备制造商可能已经更改了EditText
控件的默认AOSP行为,因此需要进行测试。