Android - 防止EditText复制/粘贴和双击全选

9
我正在寻找一种解决方案,以禁用EditText框的长按编辑菜单(复制/粘贴)和双击全选功能。我已经阅读了一些类似问题的解决方案,但需要更进一步。
对于这个应用程序,我有一个要求,即防止用户在我的应用程序中使用复制/粘贴功能,并需要一种方法来禁用此功能,该功能将适用于2.3 API以及在新平板上使用时。我正在使用NexusOne手机设备和Galaxy Tablet进行测试。(minSDK为8,目标为10)
目前我正在使用以下代码(作为示例):edittextPassword.setLongClickable(false); - 禁用弹出式编辑菜单,非常好!
这种方法确实可以在手机设备上防止编辑菜单弹出。在平板电脑上,长按操作也被禁用了。然而,平板电脑具有双击选择所有文本并打开编辑菜单的新功能。是否有一种方法可以取消/捕获/禁用较旧的API功能或防止双击手势?
更新:使用setLongClickable(false)和连接到GestureDetector的setOnTouchListener的组合(感谢Nikola的建议),我能够捕获/取消双击和长按编辑菜单的打开。
下一步需要解决的是... 在三星手机上(Galaxy S,目前不确定其他设备),当您点击一个字段时,会出现光标和浮动光标指针按钮(正确名称?)。单击此指针按钮是打开编辑菜单的另一种方法。有人知道如何禁用这个吗?我唯一剩下的解决方法是在BeforeTextChanges和AfterTextChanges上使用TextWatcher清除剪贴板。这确保即使您进入复制/粘贴菜单,剪贴板也被清除,没有任何内容可以粘贴。

目前我正在使用这个:edittextPassword.setLongClickable(false); - 禁用弹出编辑菜单,非常好!但是如果在所有设备上都能正常工作,我会感到惊讶。因为不止一个制造商已经修改了EditText与这些操作相关的工作方式。 - CommonsWare
4
请考虑用户的需求。我经常对密码输入框感到失望,因为它们不允许粘贴,而我使用随机生成的强密码(Dashlane)来保护所有账户的安全。这些密码非常难以输入,以至于我通常需要将密码更改为轻松的密码,输入完成后再将其更改回强密码。这很糟糕… - Simon
1
使用GestureListener,并在每次双击/长按时返回true。这将防止系统在事件未被处理时做出相应反应。 - Nikola Despotoski
请不要打扰您的用户 - 请记住,您无法阻止他们使用另一部手机拍照。 - Chris Stratton
2
我完全理解用户的需求,已经就用户烦恼、复制照片、手动将数据从一个应用程序复制到另一个应用程序以及其他用户“变通方法”进行了辩论。并且进行了许多有关Android规范的谈话,什么该做,什么不该做。然而,无论如何,对于这个应用程序,我有一个特定的需求,即确保我的应用程序尽可能防止在其内部进行复制/粘贴操作。如果情况不是这样的话,那当然我也不会寻找解决方案。 - Hunter23
尝试使用这个问题的被接受答案。 - Praga
1个回答

1
关于“浮动光标指针按钮”,也称为光标控制器或手柄,以及单击它时出现的上下文菜单,是的,有一种方法可以禁用它。我假设你指的是这个:

Text selection handle with paste menu

除了setLongClickable(false)和setOnTouchListener代码外,修复问题的关键在于防止PASTE/REPLACE菜单出现在(未记录)android.widget.Editor类的show()方法中。在菜单出现之前,会进行检查if (!canPaste && !canSuggest) return;。用作设置这些变量基础的两种方法都在EditText类中:

更完整的答案在此处可用。

正如@CommonsWare所提到的,各个设备制造商可能已更改EditText控件的默认AOSP行为,因此需要进行测试。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接