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长按只显示上面的复制粘贴菜单,不要弹出下面的输入法键盘怎么做?

如何从 EditText 禁用复制和粘贴

如何避免在旋转端口登陆Android4.X后在智能手机中剪切/复制/粘贴?

Android中EditText的掩码

如何隐藏复制/粘贴弹出窗口[重复]