如何将EditText输入限制为数字(可能是十进制和带符号)输入?

时间:2011-08-02 22:15:09

标签: android android-edittext

我已阅读Android: Limiting EditText to numbersHow do I show the number keyboard on an EditText in android?。不幸的是,它们似乎都不符合我的需求。

我想将EditText输入限制为仅限数字。但是,我还想允许签名和/或十进制输入。

这是我当前的代码(我需要以编程方式执行此操作):

EditText edit = new EditText(this);

edit.setHorizontallyScrolling(true);
edit.setInputType(InputType.TYPE_CLASS_NUMBER);

有了这个,我的EditText快乐地将所有输入限制为数字。不幸的是,它不允许任何其他内容,例如小数点。

如果我将该行更改为edit.setInputType(InputType.TYPE_NUMBER_FLAG_DECIMAL),EditText会接受所有输入(这不是我想要的......)。

我尝试过组合旗帜(绝望地看看它是否会起作用):

edit.setInputType(InputType.TYPE_CLASS_NUMBER);
edit.setInputType(InputType.TYPE_NUMBER_FLAG_DECIMAL)
edit.setInputType(InputType.TYPE_NUMBER_FLAG_SIGNED)

这也不起作用(EditText像往常一样接受所有输入)。

那么,我该怎么做?

11 个答案:

答案 0 :(得分:158)

没有理由使用setRawInputType(),只需使用setInputType()。但是,您必须将类和标志与OR运算符组合使用:

edit.setInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_DECIMAL | InputType.TYPE_NUMBER_FLAG_SIGNED);

答案 1 :(得分:60)

尝试使用TextView.setRawInputType(),它对应android:inputType属性。

答案 2 :(得分:12)

以编程方式执行此操作的最佳方法是使用下一个方法:

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.

答案 3 :(得分:10)

使用它。工作正常

input.setInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_DECIMAL | InputType.TYPE_NUMBER_FLAG_SIGNED);
input.setKeyListener(DigitsKeyListener.getInstance("0123456789"));

修改

kotlin版

fun EditText.onlyNumbers() {
    inputType = InputType.TYPE_CLASS_NUMBER or InputType.TYPE_NUMBER_FLAG_DECIMAL or
        InputType.TYPE_NUMBER_FLAG_SIGNED
    keyListener = DigitsKeyListener.getInstance("0123456789")
}

答案 4 :(得分:9)

将此行放在xml

 android:inputType="number|numberDecimal"

答案 5 :(得分:4)

大家好我也有这个问题。我使用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放在第一位,它仍然允许你输入任何字符,其中如果Numer是第一个它只是数字,但允许小数分隔符!

答案 6 :(得分:2)

EditText edit = new EditText(this);

edit.setHorizontallyScrolling(true);
edit.setInputType(EditorInfo.TYPE_NUMBER_FLAG_SIGNED|EditorInfo.TYPE_CLASS_NUMBER);

答案 7 :(得分:1)

要将EditText的输入类型设置为十进制,请使用以下代码:

EditText edit = new EditText(this);
edit.SetRawInputType(Android.Text.InputTypes.NumberFlagDecimal | Android.Text.InputTypes.ClassNumber);

答案 8 :(得分:0)

我的解决方案:`

   public void onTextChanged(CharSequence s, int start, int before, int count) {
   char ch=s.charAt(start + count - 1);
   if (Character.isLetter(ch)) {
       s=s.subSequence(start, count-1);
       edittext.setText(s);
    }

答案 9 :(得分:0)

使用 setRawInputType setKeyListener

editTextNumberPicker.setRawInputType(InputType.TYPE_CLASS_NUMBER | 
                   InputType.TYPE_NUMBER_FLAG_DECIMAL|InputType.TYPE_NUMBER_FLAG_SIGNED );
editTextNumberPicker.setKeyListener(DigitsKeyListener.getInstance(false,true));//set decimals and positive numbers. 

答案 10 :(得分:0)

尝试在您的“编辑文本”的xml中添加此内容:

android:inputType="numberDecimal"