Android InputType.TYPE_数字_变体_密码到可见数字密码(仅数字)
我实现了一个Edittext,它接受numberPassword,还允许用户显示密码和隐藏密码。这是可行的,但有一个问题我无法解决 我使用Android InputType.TYPE_数字_变体_密码到可见数字密码(仅数字),android,android-edittext,Android,Android Edittext,我实现了一个Edittext,它接受numberPassword,还允许用户显示密码和隐藏密码。这是可行的,但有一个问题我无法解决 我使用InputType.TYPE\u CLASS\u NUMBER和InputType.TYPE\u NUMBER\u VARIATION\u PASSWORD隐藏有效的密码,我使用InputType.TYPE\u TEXT\u VARIATION\u VISIBLE\u PASSWORD使其可见 但是,InputType.TYPE\u TEXT\u VARIAT
InputType.TYPE\u CLASS\u NUMBER和InputType.TYPE\u NUMBER\u VARIATION\u PASSWORD
隐藏有效的密码,我使用InputType.TYPE\u TEXT\u VARIATION\u VISIBLE\u PASSWORD
使其可见
但是,InputType.TYPE\u TEXT\u VARIATION\u VISIBLE\u PASSWORD
也允许用户同时输入字符和数字,但我不希望这样。我希望用户只能输入数字
请问我怎样才能做到这一点
下面是我的代码:
private fun setShowHiddenField(field: TextInputEditText, checked: Boolean){
if(checked){
field.inputType = InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD
} else {
field.inputType = InputType.TYPE_CLASS_NUMBER or InputType.TYPE_NUMBER_VARIATION_PASSWORD
}
field.setSelection(field.getText().toString().length)
}
编辑
如果有人问我为什么不使用XML?即使使用xml,使用InputType.TYPE\u TEXT\u VARIATION\u VISIBLE\u PASSWORD
仍会显示一个同时允许文本和数字的键盘
我的编辑文本代码如下:
<android.support.design.widget.TextInputEditText
android:id="@+id/cardNumberEditText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="numberPassword"
android:maxLines="1"
android:digits="1234567890"
tools:ignore="LabelFor,NegativeMargin"/>
将此视为Edittext接受PIN码,您还希望为用户提供查看和隐藏PIN码的选项
我使用复选框允许用户选择隐藏或显示。因此,我无法使用密码选项,如
passwordToggleContentDescription
或passwordToggleEnabled
或passwordToggleTint
我找到了解决问题的方法,虽然不是直接的解决方案,但它是有效的
从技术上讲,在使用模拟器时,您可能会看到键盘从字母快速变为数字,但这在设备上运行得非常好,因为除非您非常注意,否则您几乎无法注意到键盘的快速变化
您可以通过太简单的xml实现。@Blacklind如果您在代码中实现,则在使用InputType.TYPE\u TEXT\u VARIATION\u VISIBLE\u PASSWORD后会得到相同的结果
private fun setShowHiddenField(field: TextInputEditText, checked: Boolean){
if(checked){
field.inputType = InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD
// set keyboard back to allowing only digits & specify them
field.keyListener = DigitsKeyListener.getInstance("0123456789")
} else {
field.inputType = InputType.TYPE_CLASS_NUMBER or InputType.TYPE_NUMBER_VARIATION_PASSWORD
}
field.setSelection(field.getText().toString().length)
}