SetInputType(InputType.TYPE_CLASS_NUMBER) 和 setInputType(InputType.InputType.TYPE_NUMBER_VARIATION_PASSWORD) 给出不同的键盘

SetInputType(InputType.TYPE_CLASS_NUMBER) and setInputType( InputType.InputType.TYPE_NUMBER_VARIATION_PASSWORD) give out different keyboards

我正在尝试在同一屏幕上创建两个带有密码和数字的字段。但是对于他们来说,默认调用不同的键盘,这看起来并不漂亮。如何解决?

setInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_VARIATION_PASSWORD) 

setInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_VARIATION_NORMAL) 

送出不同的键盘。我该如何解决?

1.第一个输入字段:

otpField.getEditText().setType(TYPE_FORMATTED_INVISIBLE_MASK);
otpField.getEditText().setInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_VARIATION_NORMAL);

2。第二个输入字段:

ePINField.getEditText().setType(TYPE_FORMATTED_INVISIBLE_MASK);
ePINField.getEditText().setInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_VARIATION_PASSWORD);

一个非常简单但不推荐的方法是将两个字段定义为密码并使第一个 EditText 可见。这没有意义,因为第一个不是密码,但它是一种做你想做的事情的方法(我不建议,因为这会妨碍可访问性)。

otpField.getEditText().setInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_VARIATION_PASSWORD);
otpField.getEditText().setTransformationMethod(HideReturnsTransformationMethod.getInstance());
        
ePINField.getEditText().setInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_VARIATION_PASSWORD);

setTransformationMethod() 方法将第一个 EditText 保留为“普通”数字字段,毕竟它的数字可见。

这样,两个键盘在视觉上就完全一样了。

您可以通过 XML 文件实现。您只需要在 editText 中添加 inputType。 如果你想要密码输入类型然后使用 android:inputType="numberPassword" 如果你想要纯数字文本那么你可以使用 android:inputType="number".

<EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:inputType="numberPassword"/>