Android - 防止edittext复制/粘贴并双击全选[重复]
Posted
技术标签:
【中文标题】Android - 防止edittext复制/粘贴并双击全选[重复]【英文标题】:Android - prevent edittext copy/paste and double tap select all [duplicate] 【发布时间】:2013-01-05 00:35:27 【问题描述】:我正在寻找一种解决方案来禁用长按编辑菜单(复制/粘贴)以及用于编辑文本框的双击全选功能。我已经以类似的方式阅读了有关此问题的一些解决方案,但是需要更进一步。
对于这个应用程序,我需要阻止用户在我的应用程序上使用复制/粘贴功能,并且需要一种方法来禁用此功能,该功能适用于 2.3 API 以及在较新的平板电脑上使用时。我正在使用 NexusOne 手机设备和 Galaxy 平板电脑进行测试。 (minSDK 为 8,目标为 10)
目前我正在使用这个(例如): edittextPassword.setLongClickable(false); - 禁用弹出编辑菜单,太棒了!
此方法确实适用于手机设备,以防止弹出编辑菜单。在平板电脑上,长按操作也会禁用此功能。然而,平板电脑具有更新的双击功能,可以选择所有文本并打开编辑菜单。旧 API 有没有办法取消/捕获/禁用新 API 功能或阻止双击手势?
更新:使用连接到 GestureDetector 的 setLongClickable(false) 和 setOnTouchListener 的组合(感谢 Nikola 的建议),我可以捕获/取消双击和长按打开的编辑菜单。
接下来要弄清楚的是......在三星手机(Galaxy S,目前不确定其他设备)上,当您点击一个字段时,您会看到一个光标和一个浮动光标指针按钮(正确姓名??)。单击此指针按钮是打开编辑菜单的另一种方法。有谁知道如何禁用这个?我唯一的解决方法是使用 TextWatcher 清除 BeforeTextChanges 和 AfterTextChanges 上的剪贴板。这样可以确保即使您进入“复制/粘贴”菜单,剪贴板也会被清除且没有可粘贴的内容。
【问题讨论】:
“目前我正在使用这个:edittextPassword.setLongClickable(false); - 禁用弹出编辑菜单,太好了!” - 如果这适用于所有设备,我会感到惊讶。不止一家制造商修改了EditText
在此类操作方面的工作方式。
请考虑您的用户。我一直对 EditTexts 对不允许粘贴的密码感到沮丧,因为我为所有帐户使用随机生成的强密码 (Dashlane) 并且输入这些密码非常困难,以至于我通常必须将密码更改为简单的密码,输入它,然后将密码改回强密码。太烂了……
使用 GestureListener 并在每次双击/长按时返回 true。如果事件未得到处理,它将阻止系统做出相应的反应。
请不要惹恼您的用户 - 请记住,您无法阻止他们简单地与另一位手机拍照。
我当然了解用户方面,并且已经对用户烦恼、照片复制、手动将数据从一个应用程序复制到另一个应用程序以及其他用户“解决方法”进行了争论。以及关于 android 约定注意事项的大量对话。然而,无论如何,对于这个应用程序,我有一个特定的要求,以确保我的应用程序尽其所能防止从自身内部复制/粘贴。如果不是这样,那我当然不会寻找解决方案。
【参考方案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 行为,因此有必要进行测试。
【讨论】:
以上是关于Android - 防止edittext复制/粘贴并双击全选[重复]的主要内容,如果未能解决你的问题,请参考以下文章
Android:如何在 Edittext 中完全禁用复制和粘贴功能
Android的EditText长按只显示上面的复制粘贴菜单,不要弹出下面的输入法键盘怎么做?