【发布时间】:2011-02-19 07:33:14
【问题描述】:
对于EditText 框,用户应该只输入有效数字,所以我使用android:inputType="numberDecimal"。不幸的是,Android 提供的软键盘只有顶行有数字,而接下来的三行有各种其他符号(美元符号、百分号、感叹号、空格等)。由于numberDecimal 只接受数字 0-9、负号和小数点,因此使用“电话”软键盘(0-9 在 3x3 网格中,加上一些其他符号)会更有意义。这将使按钮更大,更容易点击(因为它是 4x4 网格,而不是同一屏幕区域中的 10x4 网格)。不幸的是,使用android:inputType="phone" 允许使用括号等非数字字符
我尝试使用android:inputType="numberDecimal|phone",但位标志的numberDecimal 方面似乎被忽略了。我也尝试过将android:inputType="phone" 与android:digits="0123456789-." 结合使用,但这仍然允许使用多个负号或小数点(inputType="number" 对此类事情的错误检查非常好,甚至不会让用户输入)。我也尝试在 xml 布局文件中使用android:inputType="phone",同时在 java 代码中使用DigitsKeyListener,但随后只使用默认数字软键盘(仅在顶行有数字的那个)(它似乎设置InputType.TYPE_CLASS_NUMBER,这会使xml布局设置的InputType.TYPE_CLASS_PHONE无效)。
编写自定义 IME 是行不通的,因为用户必须选择 IME 作为应用程序外部的全局选项。
有什么方法可以使用“电话”式软键盘,同时对输入的内容使用“数字”限制?
【问题讨论】:
-
在 Android 4 上,InputType.TYPE_CLASS_NUMBER 提供了一个不错的 4x4 键盘,并且比 InputType.Type_CLASS_PHONE 略好于普通数字。不幸的是,他们在旧版本上搞砸了,迫使我们开发人员自己破解它。
-
我需要为编辑框支持数字和小数点。我尝试了以下方法,它似乎显示带有数字和句点的数字键盘。 amountField.setInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_DECIMAL);