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

问题描述 投票:0回答:12

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

我想将我的 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 像往常一样接受所有输入)。

那么,我该怎么做?

android android-edittext
12个回答
184
投票

没有理由使用

setRawInputType()
,只需使用
setInputType()
。但是,您必须使用 OR 运算符将类和标志组合起来:

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

71
投票

尝试使用 TextView.setRawInputType() 它对应于

android:inputType
属性。


22
投票

用这个。效果很好

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")
}

14
投票

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

public static DigitsKeyListener getInstance (boolean sign, boolean decimal) 

返回接受数字 0 到 9 的 DigitsKeyListener,加上减号(仅在开头)和/或小数点(每个字段仅一个)(如果指定)。

这解决了很多“.”的问题在编辑文本中

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.

13
投票

将此行放入

xml

 android:inputType="number|numberDecimal"

5
投票

大家好,我也遇到了这个问题。我将 C# 与 Xamarin 结合使用

只是一个小小的说明,我希望其他人也能如此。

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

edittext1.SetRawInputType(Android.Text.InputTypes.ClassNumber | Android.Text.InputTypes.NumberFlagDecimal);

是最接近的,但仍然不起作用。正如拉尔夫提到的,你可以使用

edit.setInputType(InputType.TYPE_CLASS_NUMBER | 输入类型.TYPE_NUMBER_FLAG_DECIMAL | 输入类型.TYPE_NUMBER_FLAG_SIGNED);

但是在我的 C# 中我没有这个。相反,您可以按如下方式执行:

edittext1.InputType = Android.Text.InputTypes.ClassNumber | Android.Text.InputTypes.NumberFlagDecimal;

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


2
投票
EditText edit = new EditText(this);

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

1
投票

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

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

1
投票

尝试将其放入编辑文本的 xml 中:

android:inputType="numberDecimal"

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);
    }

0
投票

使用 setRawInputTypesetKeyListener

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. 

0
投票
setInputType(TYPE_CLASS_NUMBER  or TYPE_NUMBER_FLAG_DECIMAL or TYPE_NUMBER_FLAG_SIGNED)
© www.soinside.com 2019 - 2024. All rights reserved.