在 EditText 中阻止物理键盘输入
Posted
技术标签:
【中文标题】在 EditText 中阻止物理键盘输入【英文标题】:Block physical keyboard input in EditText 【发布时间】:2016-03-15 03:13:10 【问题描述】:我有一个 EditText,它不允许用户通过键盘(软键盘或硬键盘)输入任何内容。这个 EditText 应该只允许用户通过应用程序在屏幕上显示的键(按钮)输入一些东西。 我已禁用软键盘,但找不到禁用硬件键盘输入的方法。可以使用配置为允许通过硬件键盘输入的模拟器来完成通过硬件键盘的输入。 所以,我的问题是,如何在 EditText 中通过物理键盘阻止输入? 谢谢!
【问题讨论】:
文本视图?你不是说EditText吗? 如果用户不能使用EditText
,为什么首先要有它?
对不起,TextView,不知道我第一次写的时候在想什么,已修复。 @CommonsWare 用户可以使用它,不同之处在于输入的方式。不是软键盘做的,是应用在屏幕上显示的一些按键做的。
这不能回答我的问题。为什么使用EditText
?为什么不直接使用TextView
?毕竟,如果您使用EditText
,而用户尝试使用它却失败了,那么如何阻止用户认为您的应用程序已损坏?
我使用的是 EditText,因为该字段应该表现得像一个 EditText,唯一的区别在于输入法。否则我可以使用 TextView。希望现在更清楚了。感谢您的回复。
【参考方案1】:
终于明白了! 代码:
editText.setOnKeyListener(new View.OnKeyListener()
@Override
public boolean onKey(View v, int keyCode, KeyEvent event)
return true;
);
说明: 返回 true 将告诉听众我已经处理了硬件键盘输入。基于 android 文档 (http://developer.android.com/reference/android/view/View.OnKeyListener.html)
View.OnKeyListener:当 hardware 键事件被分派到此视图时要调用的回调的接口定义。将在将键事件提供给视图之前调用回调。这仅对硬件键盘有用;软件输入法没有义务触发这个监听器。
onKey(View v, int keyCode, KeyEvent 事件) 当 hardware 键被分派到视图时调用。
【讨论】:
这行得通,但不幸的是,一旦字段获得焦点,即使是导航按键也会被拦截。因此,如果用户使用硬件键盘进行导航,他们就会被困在现场。 嗨@damien5314 我的情况很好,因为用户不应该能够使用硬件或软键盘专门与该字段进行交互。您应该评估是否是您的情况。 不适合我。此解决方案也忽略了来自虚拟键盘的数字符号。需要返回!return event.getDevice().isVirtual()
- 这将只忽略硬件键盘。
嗨,Alexey,它适合我的情况,因为我不希望用户使用软键盘和硬件键盘与 EditText 进行交互,只通过屏幕上的一些按钮。根据文档link“软件键盘中的按键通常不会触发此方法,尽管在某些情况下可能会选择这样做。”所以也许那是因为你必须使用这个 isVirtual() 方法。
输入通过 onKeyListner 但返回 true 不会删除默认行为。有人找到解决方案了吗?【参考方案2】:
你可以根据你想要的 xml 布局尝试这些
android:longClickable="false"
android:clickable="false"
android:cursorVisible="false"
android:editable="false"
然后让 edittext 显示用户通过您在应用中制作的键盘键入的内容。
【讨论】:
感谢您的回复!不幸的是,它没有奏效。 =/ 我也试图避免最初关注该编辑文本,但如果我开始在键盘上键入任何内容,该字段就会开始填满。以上是关于在 EditText 中阻止物理键盘输入的主要内容,如果未能解决你的问题,请参考以下文章