Android - 阻止edittext复制/粘贴,然后双击全选

时间:2013-01-21 21:19:13

标签: android android-edittext copy-paste gesture

我正在寻找一种解决方案来禁用长按编辑菜单(复制/粘贴)以及双击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上的剪贴板。这样可以确保即使您进入“复制/粘贴”菜单,也会清除剪贴板,并且无需粘贴任何内容。

1 个答案:

答案 0 :(得分:1)

关于'浮动光标指针按钮',它被称为cursor controller, or handle,以及点击它时出现的上下文菜单,是的,有一种方法可以禁用它。我假设你是指这个:

Text selection handle with paste menu

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

更完整的答案是available here

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