如何在 EditText Android 中禁用退格行​​为?

Posted

技术标签:

【中文标题】如何在 EditText Android 中禁用退格行​​为?【英文标题】:How to disable backspace behaviour in EditText Android? 【发布时间】:2014-07-01 15:01:32 【问题描述】:

例如,我在 EditText 中有以下字符串:

Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat

正常的行为是,当用户在虚拟键盘上长按退格键时,系统会直接删除每个单词,例如:

Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat

变成

Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat

我可以防止此类行为在我的应用中发生吗?

我尝试观察onKeyDownonKeyUponKeyLongPressonTextChangedafterTextChangedbeforeTextChanged,但没有找到可以用来防止此类行为的东西。

【问题讨论】:

为什么要避免这种情况?任何时候你想改变操作系统中如此重要的东西,你都需要仔细考虑。 其实没有什么特别的原因,我只希望长按和退格键短按一样。 是的,如果没有真正令人信服的理由,那么您不应该这样做。改变操作系统的基本范式总是会给用户带来糟糕的体验。 这不一定是操作系统,而是 IME(软键盘)。 android 允许您安装第 3 方 IME,它们中的任何一个都可能以不同的方式处理这些按键(您根本无法控制)。 【参考方案1】:

覆盖它只会让用户感到困惑,这是个坏主意。但这是键盘在 Android 中的工作方式——它们决定显示哪些按钮以及它们响应用户输入的操作。没有办法覆盖它。如果你不喜欢这种行为,我建议你找一个可以按你想要的方式工作的键盘。

覆盖 onKeyXXX 不起作用,因为它们是物理按钮,不会由屏幕键盘生成。

如果您不得不覆盖它,您需要实现一个TextWatcher 并在afterTextChanged 中编辑序列s。您需要查找新文本比旧文本小 1 个字符以上的情况,如果是,则将文本替换为旧文本减去 1 个字符。请注意,根据键盘和 Android 序列事件的方式,这可能会破坏任何具有自动更正功能的键盘或任何使用完成文本的键盘。

换句话说 - 不要这样做,它会带来比它的价值更多的麻烦,并且会破坏大多数用户。

【讨论】:

好的。我完全同意你的观点,CaseyB 和 Karakuri。我将重新设计我的应用的可用性。

以上是关于如何在 EditText Android 中禁用退格行​​为?的主要内容,如果未能解决你的问题,请参考以下文章

Android:如何在 Edittext 中完全禁用复制和粘贴功能

Android文本输入框EditText禁用分号

如何禁用 EditText 中的 SwiftKey(第三方键盘)行为?

Android EditText 捕获KEYCODE_ENTER后按下Del键无法正常退格?

Android 仅对 Edittext 禁用空间

Android EditText禁用编辑但允许滚动