如何以编程方式将EditText的输入类型从PASSWORD更改为 NORMAL?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (13)

在我的申请中,我有一个EditText其默认输入类型设置为android:inputType="textPassword"被迪奥。它有一个CheckBox在其右侧,即选中时,将该EditText的输入类型更改为普通纯文本。密码是-

password.setInputType(InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD);

我的问题是,当未选中该复选框时,它应该再次将输入类型设置为PASSWORD。我用-

password.setInputType(InputType.TYPE_TEXT_VARIATION_PASSWORD);

令人惊讶的是,当我更改定向时,它会自动将输入类型设置为密码,并且里面的文本将被符号化(如密码一样显示)。

有办法做到这一点吗?

提问于
用户回答回答于

只要以编程方式向该EditText添加一个额外的属性:

password.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD);

另外,确保光标位于EditText中文本的末尾。因为,当您更改输入类型时,游标将自动设置为起始点。因此,我建议使用以下代码:

et_password.setInputType(InputType.TYPE_CLASS_TEXT | 
    InputType.TYPE_TEXT_VARIATION_PASSWORD);
et_password.setSelection(et_password.getText().length());

使用数据绑定时,可以使用以下代码

<data>
        <import type="android.text.InputType"/>
.
.
.
<EditText
android:inputType='@{someViewModel.isMasked ? 
(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD) :
InputType.TYPE_CLASS_TEXT }'
用户回答回答于

mCbShowPwd.setOnCheckedChangeListener(new OnCheckedChangeListener() {

            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                // checkbox status is changed from uncheck to checked.
                if (!isChecked) {
                        // show password
                    mEtPwd.setTransformationMethod(PasswordTransformationMethod.getInstance());
                } else {
                        // hide password
                    mEtPwd.setTransformationMethod(HideReturnsTransformationMethod.getInstance());
                }
            }
        });

扫码关注云+社区