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"
这对我来说已经足够好了。
我创建了一个只允许输入数字的 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"
这对我来说已经足够好了。