如何限制我的EditTextinput数值(可能是小数和有符号)input?
我已经阅读Android:限制EditText数字和如何显示Android上的EditText数字键盘? 。 不幸的是,他们中没有一个似乎符合我的需求。
我想限制我的EditTextinput只有数字。 不过,我也想要允许签名和/或十进制input。
这是我目前的代码(我需要以编程方式):
EditText edit = new EditText(this); edit.setHorizontallyScrolling(true); edit.setInputType(InputType.TYPE_CLASS_NUMBER);
有了这个,我的EditText快速地限制所有的input数字。 不幸的是,它不允许任何其他的,如小数点。
如果我将该行更改为edit.setInputType(InputType.TYPE_NUMBER_FLAG_DECIMAL)
,EditText接受所有input(这不是我想要的…)。
我已经试过组合标志(绝望,看看它是否会工作):
edit.setInputType(InputType.TYPE_CLASS_NUMBER); edit.setInputType(InputType.TYPE_NUMBER_FLAG_DECIMAL) edit.setInputType(InputType.TYPE_NUMBER_FLAG_SIGNED)
这也没有工作(EditText像往常一样接受所有input)。
那么,我该怎么做呢?
尝试使用TextView.setRawInputType()它对应于android:inputType
属性。
没有理由使用setRawInputType()
,只是使用setInputType()
。 但是,您必须将类和标志与OR运算符结合使用:
edit.setInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_DECIMAL | InputType.TYPE_NUMBER_FLAG_SIGNED);
以编程方式执行此操作的最佳方法是使用下一个方法:
public static DigitsKeyListener getInstance (boolean sign, boolean decimal)
如果指定,返回一个DigitsKeyListener,它接受数字0到9,加上减号(仅在开始时)和/或小数点(每个字段只有一个)。
这解决了许多“问题”。 在EditText中
editText.setKeyListener(DigitsKeyListener.getInstance(true,true)); // decimals and positive/negative numbers. editText.setKeyListener(DigitsKeyListener.getInstance(false,true)); // positive decimals numbers. editText.setKeyListener(DigitsKeyListener.getInstance(false,false)); // positive integer numbers. editText.setKeyListener(DigitsKeyListener.getInstance(true,false)); // positive/negative integer numbers.
把这行放在xml
android:inputType="number|numberDecimal"
大家好我也有这个问题。 我使用C#和Xamarin
只是稍微注意一点,我希望别人也是如此。
我已经尝试了这里提到的多种方法。
edittext1.SetRawInputType(Android.Text.InputTypes.ClassNumber | Android.Text.InputTypes.NumberFlagDecimal);
是最接近但仍然没有工作。 正如拉尔夫所说,你可以使用
edit.setInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_DECIMAL | InputType.TYPE_NUMBER_FLAG_SIGNED);
但是在我的C#中,我没有这个。 相反,你做如下:
edittext1.InputType = Android.Text.InputTypes.ClassNumber | Android.Text.InputTypes.NumberFlagDecimal;
请注意,这些的顺序是重要的。 如果先把Decimal放进去,它仍然允许你input任何字符,如果Numer是第一个,它只是数字,但允许一个小数点分隔符!
EditText edit = new EditText(this); edit.setHorizontallyScrolling(true); edit.setInputType(EditorInfo.TYPE_NUMBER_FLAG_SIGNED|EditorInfo.TYPE_CLASS_NUMBER);
要将EditText的inputtypes设置为十进制,请使用以下代码:
EditText edit = new EditText(this); edit.SetRawInputType(Android.Text.InputTypes.NumberFlagDecimal | Android.Text.InputTypes.ClassNumber);
用这个。 工作正常
input.setInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_DECIMAL | InputType.TYPE_NUMBER_FLAG_SIGNED); input.setKeyListener(DigitsKeyListener.getInstance("0123456789"));