如何限制我的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"));