Android EditText - 仅输入数字

Android EditText - Input with numbers only

我创建了一个只允许输入数字的 EditText。这是一个非常简单的 EditText,没有什么特别之处:

<EditText
        android:id="@+id/editTextAmount"
        android:layout_marginTop="10dp"
        android:layout_width="100dp"
        android:layout_height="wrap_content"
        android:background="@color/colorWhite"
        android:inputType="text"
        android:digits="0123456789"
        />

我在几台设备上试过了,它按预期工作,我只能输入数字。使用 Samsung Galaxy Note S10+ 时会出现此问题(使用三星键盘,我认为问题出在此处)。使用该设备,当我聚焦 EditText 时,键盘会打开(只有数字可见),但是当我在字段中键入内容时,什么也没有发生。我可以按键盘上的任意键(输入键、数字、...)没有任何变化。

我试图在 activity 中以编程方式更改输入类型,我尝试 fiddle 与 inputType (numberDecimal, numberSigned, both, ...) 在任何情况下它根本不是在职的。有趣的是,如果我将 inputType 更改为“文本”并删除数字限制,那么它就可以正常工作了。

我的问题是:如何使用 Samsung Galaxy Note S10+ 将 EditText 输入限制为数字?

编辑:为了清楚起见,我要求针对特定设备!我已经试过了:

android:inputType="number"

editText.setInputType(InputType.TYPE_CLASS_NUMBER);

并且 这些 (numberDecimal, numberSigned, ...)

的任何变体

in Java class 像这样设置输入类型

editText.setInputType(InputType.TYPE_CLASS_NUMBER);

或者如果你想从布局中做到这一点,那么设置

android:inputType="number"
myEditText.setInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_VARIATION_PASSWORD);

或者,如果您愿意,可以像这样编辑 XML:

android: inputType = "numberPassword"

两个配置都会显示密码项目符号,所以我们需要创建一个自定义的 ClickableSpan class:

private class NumericKeyBoardTransformationMethod extends PasswordTransformationMethod {
    @Override
    public CharSequence getTransformation(CharSequence source, View view) {
        return source;
    }
}

最后我们需要在 EditText 上实现它以显示键入的字符。

myEditText.setTransformationMethod(new NumericKeyBoardTransformationMethod());

它似乎适用于此配置:

android:digits="0123456789"
android:inputType="phone"

这对我来说已经足够好了。