如何在EditText上默认使用数字键盘而不强制要求输入数字?

40

这个问题在其他地方查询过,但没有得到有效解答。在 Android 中有没有办法在焦点位于 EditText 上时显示数字软键盘,但仍允许输入任何文本?

我希望允许用户输入数量(例如“1 kg”,“2 L”),因此仅设置 inputType="number" 是不行的。


有很多相关帖子对此有很多答案,但不幸的是,如果你想要你的代码能够在“大多数设备”上运行,使用inputTypesetRawInputType()目前是不可能的。 - Richard Le Mesurier
6个回答

33

添加以下代码即可解决问题:)

editText.setRawInputType(Configuration.KEYBOARD_QWERTY);

这将首先显示数字键盘,但同时也允许您输入自由文本。

更多信息在此处


12
并非所有软键盘都与其兼容。 - user1940676
4
无法在三星S3 mini和S4上运行,确切原因未知。 - Juliatzin
14
这个答案没有意义,setRawInputType函数期望从InputType而非Configuration获取值。碰巧的是,Configuration.KEYBOARD_QWERTY是2,而InputType.TYPE_CLASS_NUMBER也是2。 - satur9nine
5
这个答案完全无效!解决方案行不通,Configuration类常量不适用于setRawInputType。 - Michael P
这不是预期的结果。 - Mohamed Ibrahim
显示剩余2条评论

8

这可能与设备相关,但您尝试过以下方法吗:

 android:inputType="phone"

所有输入类型链接

在EditText的xml中,这将为您提供数字键盘,但如果您想要,仍然可以切换到字母。 (至少在我的Nexus One上是这样)。


4
如果您将inputType指定为"number",您也可以切换到字母模式,但按下字母键没有任何效果。如果我设置inputType为"phone",在我的设备上甚至无法切换到字母模式,更不用说输入文本了。您能在您的电话字段中输入字母吗? - Lyudmil

7
请注意:setRawInputType(InputType.TYPE_CLASS_NUMBER);对一些设备有所作用,但对另外一些设备则没有。在HTC上它可以正常运作,然而在Galaxy Tab II上你将只能得到数字键盘,无法切换回字母键盘。

4

将代码编写为XML格式, android:numeric="integer"表示输入的内容必须是整数。 android:inputType="phone"表示输入的内容必须是电话号码。 android:digits="1234567890"表示输入的内容只能包含数字0到9。


2

看起来你要处理的根本问题是:如何让用户输入数量?

一个合适的答案是:使用数字输入框,再配合一些形式的类别选择器。例如单选按钮、下拉列表或旋转选择器。这样做可能更容易使用,也可以避免每次都需要验证输入。

你也可以拥有坚定的决心,编写自定义软键盘。


1
自定义键盘 - 真正可用的唯一解决方案。 - Richard Le Mesurier

-1

在我弄明白之前,我尝试了许多不同的组合,但这似乎可以正确地工作:

setRawInputType(InputType.TYPE_CLASS_NUMBER);

关键在于setRawInputType(int)的描述:

直接更改文本视图的内容类型整数,而不修改任何其他状态


3
和马克的回答一样。在所有设备上都不起作用。 - OneWorld

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接