Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java setKeyListener将覆盖setInputType并更改键盘_Java_Android_Android Edittext_Searchview_Android Inputtype - Fatal编程技术网

Java setKeyListener将覆盖setInputType并更改键盘

Java setKeyListener将覆盖setInputType并更改键盘,java,android,android-edittext,searchview,android-inputtype,Java,Android,Android Edittext,Searchview,Android Inputtype,大家好,我在两台设备之间遇到问题 实际上,使用InputType和keylister我正在操作一个EditText,使其从数字键盘接收逗号和数字(有关更多背景信息,请查看我之前的工作) 使用以下代码,我可以做类似的事情: editText.setInputType(InputType.TYPE_CLASS_NUMBER + InputType.TYPE_NUMBER_FLAG_DECIMAL); editText.setKeyListener(DigitsKeyListener.

大家好,我在两台设备之间遇到问题

实际上,使用
InputType
keylister
我正在操作一个
EditText
,使其从数字键盘接收逗号和数字(有关更多背景信息,请查看我之前的工作)

使用以下代码,我可以做类似的事情:

    editText.setInputType(InputType.TYPE_CLASS_NUMBER + InputType.TYPE_NUMBER_FLAG_DECIMAL);
    editText.setKeyListener(DigitsKeyListener.getInstance("0123456789,"));

不幸的是,这在一些设备上不起作用,如华硕ZenPad 8.0或一些三星

只有数字键盘显示时没有逗号,因此用户无法单击并使用它。重要的是,注释下面的代码行可以正确显示带有逗号的键盘。但通过这样做,他们不再能够在同一搜索中使用多个逗号

    editText.setKeyListener(DigitsKeyListener.getInstance("0123456789,"));
不使用KeyListener

使用KeyListener


我也读过android文档,上面写着():

用于将文本键事件转换为计算机上的编辑操作的接口 可编辑类。请注意,在大多数情况下,此接口是 由InputMethod定义的通用软输入法代替;信息技术 应仅用于应用程序有自己的 屏幕上的键盘,还希望处理硬键盘事件 匹配它

无需按下软输入法上的键即可触发 方法,实际上不鼓励这样做。这个 默认的android键盘不会为任何键触发这些 应用程序以Jelly Bean或更高版本为目标,并且只提供它 针对针对冰淇淋三明治或三明治的应用程序的一些按键 早些时候

那么,对于旧版本的android来说,这基本上不起作用?如何复制上述行为?(基本上我如何使用逗号数不限的数字键盘)

如需更多详细信息,请发表评论,我将乐意回复并添加更多信息

提前感谢,,
Giacomo.

这完全取决于您使用EditText的目的(如果字母也可见会很悲惨吗?)您可以简单地使用默认输入类型,并简单地在其上设置一个过滤器,这样当您按下键时,它只接受数字和一个“字符”(即逗号)。这是一个可以让你这么做的工具。诚然,它看起来并不漂亮,但它将为用户提供可靠的体验,可以在所有设备上运行


另一种选择是如上所述创建您自己的键盘

“我也阅读了android文档中关于这个的内容”——什么是“这个”?事实并非如此。我在文档中的任何地方都找不到您引用的部分。“所以基本上,对于旧版本的android来说,这是行不通的?”——更重要的是,你的黑客行为将是不可靠的。26000多种Android设备型号(以及用户安装的键盘)中有几十种(如果不是几百种的话)输入法编辑器。@commonware您好,我添加了引用文档的链接,您可以在“(source)”下找到该链接……也是您的忠实粉丝,提前谢谢!我无法解释为什么当你在诸如
瞄准冰激凌三明治
之类的短语上搜索文档时,该页面不会显示。谢谢你的链接!不管怎样,你的方法会做出假设。例如,当您请求
setInputType(InputType.TYPE\u CLASS\u NUMBER+InputType.TYPE\u FLAG\u DECIMAL)
时,不要求任何输入法在键盘上提供逗号。这取决于IME的开发人员。说我的好话不会改变这一点。:-)(尽管如此,谢谢你的好话!)@commonware好的,我知道这取决于IME的开发者通过设置特定类型的InputType来决定是否显示逗号,尽管如此:InputType不总是决定显示哪个键盘吗?既然如此,为什么设置KeyListener会改变键盘?(我在问题中添加了更多的信息,显示了他们的行为……如果我仍然不理解或者之前没有很好地解释自己,也很抱歉)。“InputType不总是决定显示哪个键盘吗?”--这是一个提示。IME的开发人员如何响应提示取决于IME的开发人员。IME开发人员可能会考虑十进制和千位分隔符,而不是严格意义上的“逗号”。“既然如此,为什么设置KeyListener会改变键盘?”--制造商可能会根据对
EditText
的更改为自己的IME添加特殊挂钩,这些更改会对
KeyListener
作出反应。老实说,这是我没有预料到的一个方面。很抱歉重播太晚了,但是是的。。这太悲惨了。在这种情况下,我认为最干净的方法就是创建自己的键盘。你可能会发现其他人已经做了一些