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

kib*_*yte 53 android android-edittext

我读过Android:将EditText限制为数字,如何在android中的EditText上显示数字键盘?.不幸的是,它们似乎都不符合我的需求.

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

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

EditText edit = new EditText(this);

edit.setHorizontallyScrolling(true);
edit.setInputType(InputType.TYPE_CLASS_NUMBER);
Run Code Online (Sandbox Code Playgroud)

有了这个,我的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)
Run Code Online (Sandbox Code Playgroud)

这也不起作用(EditText照常接受所有输入).

那么,我该怎么做?

Ral*_*alf 162

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

edit.setInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_DECIMAL | InputType.TYPE_NUMBER_FLAG_SIGNED);
Run Code Online (Sandbox Code Playgroud)

  • 有时,Android会让我脱掉头发.为什么这么简单如此简单难以置信且容易出错? (4认同)

Dan*_*n S 63

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

  • 使用您的示例代码:`edit.setRawInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_DECIMAL);` (52认同)
  • 解决方案是什么?使用其中任何一个我仍然得到我不想要的键"*","#"和parentesis等...我只想要数字和 - /+ /.字符,怎么办? (2认同)

Ser*_*Gal 12

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

public static DigitsKeyListener getInstance (boolean sign, boolean decimal) 
Run Code Online (Sandbox Code Playgroud)

返回一个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.
Run Code Online (Sandbox Code Playgroud)


Vla*_*lad 12

用这个.工作良好

input.setInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_DECIMAL | InputType.TYPE_NUMBER_FLAG_SIGNED);
input.setKeyListener(DigitsKeyListener.getInstance("0123456789"));
Run Code Online (Sandbox Code Playgroud)

编辑

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")
}
Run Code Online (Sandbox Code Playgroud)


Qut*_*hra 10

把这一行放进去 xml

 android:inputType="number|numberDecimal"
Run Code Online (Sandbox Code Playgroud)


小智 5

大家好我也有这个问题。我在 Xamarin 中使用 C#

只是一个小提示,我希望其他人也是如此。

我已经尝试了这里提到的多种方法。

edittext1.SetRawInputType(Android.Text.InputTypes.ClassNumber | Android.Text.InputTypes.NumberFlagDecimal);
Run Code Online (Sandbox Code Playgroud)

是最接近的,但仍然无法正常工作。正如拉尔夫提到的,你可以使用

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;
Run Code Online (Sandbox Code Playgroud)

请注意,这些的顺序很重要。如果您将 Decimal 放在首位,它仍然允许您键入任何字符,如果 Numer 放在第一位,则它只是数字,但允许使用十进制分隔符!