【问题标题】:setKeyListener will override setInputType and change the keyboardsetKeyListener 将覆盖 setInputType 并更改键盘
【发布时间】:2020-07-27 11:25:52
【问题描述】:

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

在使用InputTypeKeyListener 的实践中,我正在操作EditText 以使其接收来自数字键盘的逗号和数字(有关更多背景信息,请查看我之前的question)。

使用下面的代码我可以做这样的事情:

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

很遗憾,这不适用于某些设备,例如 Asus ZenPad 8.0 或某些三星。

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

    editText.setKeyListener(DigitsKeyListener.getInstance("0123456789,"));

没有 KeyListener

使用 KeyListener

我还阅读了有关此的 android 文档,上面写着 (source):

用于将文本键事件转换为编辑操作的接口 可编辑类。请注意,在大多数情况下,此接口已 由 InputMethod 定义的一般软输入法取代;它 应该只用于应用程序有自己的情况 屏幕键盘,并且还希望处理硬键盘事件以 匹配它。

软输入法上的按键不需要触发 这个监听器中的方法,实际上不鼓励这样做。这 默认的 android 键盘不会为任何键触发这些 以 Jelly Bean 或更高版本为目标的应用程序,并且只会交付它 对于针对冰淇淋三明治的应用程序的某些按键或 早一点。

所以基本上对于旧版本的 android 这不起作用?如何复制上述行为? (基本上如何使用无限个逗号的数字键盘)

有关更多详细信息,请发表评论,我很乐意回复并添加更多信息!

提前致谢, 贾科莫。

【问题讨论】:

  • “我也阅读了关于这个的 android 文档”——什么是“这个”?它不是setKeyListener()。我在文档中的任何地方都找不到您引用的部分。 “所以基本上对于旧版本的 android 这不起作用?” - 更多的是你的黑客将是不可靠的。在超过 26,000 种 Android 设备型号(和用户安装的键盘)中,有数十种(如果不是数百种)输入法编辑器。
  • @CommonsWare 嗨,我添加了引用文档的链接,您可以在“(源)”下找到该链接..也是您的忠实粉丝,提前致谢!
  • 我无法解释为什么当您在像 targetting Ice Cream Sandwich 这样的短语上搜索文档时该页面没有显示。感谢您的链接!无论如何,您的方法都会做出假设。例如,当您请求 setInputType(InputType.TYPE_CLASS_NUMBER + InputType.TYPE_NUMBER_FLAG_DECIMAL) 时,任何 IME 都不需要在键盘上提供逗号。这取决于 IME 的开发人员。说我的好话不会改变这一点。 :-)(不过,谢谢你的好话!)
  • @CommonsWare Okey 我知道 IME 的开发人员可以通过设置某种类型的 InputType 来决定是否显示逗号: InputType 是否总是确定要显示哪个键盘?说了这么多,为什么设置 KeyListener 会改变键盘呢? (我在问题中添加了更多信息,显示了行为方式。如果我仍然不明白或者我之前没有很好地解释过自己,也很抱歉)。
  • "InputType 不是总是决定显示哪个键盘吗?" ——这是一个提示。 IME 的开发人员如何响应提示取决于 IME 的开发人员。 IME 开发人员可能会考虑十进制和千位分隔符,而不是严格地考虑“逗号”。 “话虽如此,为什么设置 KeyListener 会改变键盘?” -- 制造商可能会根据对EditText 的更改为他们自己的IME 添加特殊的钩子,以响应KeyListener。老实说,这是你所看到的事情的一个方面,我没有预料到。

标签: java android android-edittext searchview android-inputtype


【解决方案1】:

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

另一种方法是创建您自己的键盘,如上所述

【讨论】:

  • 抱歉重播晚了,但是是的.. 太悲剧了。
  • 在这种情况下,我认为最简洁的方法是实际创建自己的键盘。您可能会找到一些其他人已经完成的操作
猜你喜欢
  • 2012-09-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-10
  • 2020-10-02
  • 1970-01-01
  • 2011-09-01
  • 1970-01-01
相关资源
最近更新 更多