对于EditText
框,用户应该只输入有效的数字,所以我使用android:inputType="numberDecimal"
。不幸的是,Android带来的软键盘只有顶行的数字,而接下来的三行有各种各样的其他符号(美元符号,百分号,感叹号,空格等)。由于numberDecimal
只接受数字0-9、负号和小数点,因此使用“电话”软键盘( 3x3网格中的0-9,加上其他一些符号)会更有意义。这将使按钮变得更大,更容易点击(因为它是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作为应用程序之外的全局选项。
有没有办法使用“电话”风格的软键盘,同时对输入的内容使用“数字”限制?
发布于 2010-05-15 04:47:38
到目前为止,我决定做的是扩展DigitsKeyListener并覆盖getInputType(),这样它将返回InputType.TYPE_CLASS_PHONE。这允许我在使用TYPE_CLASS_PHONE软键盘的同时,在DigitsKeyListener中使用方便的filter()。我是Android编程的新手,但这似乎是在不破坏任何东西的情况下工作。代码是这样的:
import android.text.method.DigitsKeyListener;
import android.text.InputType;
public class CustomDigitsKeyListener extends DigitsKeyListener
{
public CustomDigitsKeyListener() {
super(false, false);
}
public CustomDigitsKeyListener(boolean sign, boolean decimal) {
super(sign, decimal);
}
public int getInputType() {
return InputType.TYPE_CLASS_PHONE;
}
}
这样做(将getInputType()的返回值切换为超类不想要的值)有什么错吗?
发布于 2011-11-29 12:11:17
我也有同样的问题。这对我来说很有效:
<item name="android:inputType">numberDecimal</item>
<item name="android:digits">0123456789.</item>
希望这能对你有所帮助。
发布于 2014-02-28 02:33:13
Adam Dunn的代码运行完美,但是没有展示如何实现这个类
import android.text.method.DigitsKeyListener;
import android.text.InputType;
public class CustomDigitsKeyListener extends DigitsKeyListener
{
public CustomDigitsKeyListener() {
super(false, false);
}
public CustomDigitsKeyListener(boolean sign, boolean decimal) {
super(sign, decimal);
}
public int getInputType() {
return InputType.TYPE_CLASS_PHONE;
}
}
然后你必须像这样举例
MyTextView.setKeyListener(new CustomDigitsKeyListener(true,true));
https://stackoverflow.com/questions/2830664
复制相似问题