使用EditText显示密码

bri*_*ian 28 android android-edittext

我使用EditText输入密码.还有一个CheckBox来显示密码.以下功能是部分:

public void ShowPassword() {
    if (cb.isChecked()) {
        password.setInputType(InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD);
    } else {
        password.setInputType(InputType.TYPE_TEXT_VARIATION_PASSWORD);
    }
}
Run Code Online (Sandbox Code Playgroud)

检查时,显示密码.但是当它没有被检查时,它确实显示了星星.如何在未选中cb的情况下修改它以显示星标?

jos*_*hus 62

我不确切知道具体细节,但这段代码应该有效:

checkbox.setOnCheckedChangeListener(new OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                if(!isChecked) {
                    password.setInputType(InputType.TYPE_TEXT_VARIATION_PASSWORD);
                } else {
                    password.setInputType(129);
                }
            }
        });
Run Code Online (Sandbox Code Playgroud)

129 是设置时设置的输入类型 android:inputType="textPassword"

编辑:

如@ user370305的回答中提到的那样,129当你这样做时,是按位或操作的值

password.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD);
Run Code Online (Sandbox Code Playgroud)


use*_*305 46

这不是答案,

已经给出并接受的答案..

我只想澄清一下 129

password.setInputType(129);
Run Code Online (Sandbox Code Playgroud)

实际上是,

password.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD);
Run Code Online (Sandbox Code Playgroud)

'|' 不是管道,它是一个bitwise OR.它需要两个二进制数,如果其中任何一个相等的值是1,

这与输入类型有何关系:每个InputTypes实际上只是整数. TYPE_CLASS_TEXT is 1,和TYPE_TEXT_VARIATION_PASSWORD is 128 (or 10000000).

bitwise OR对他们执行:

00000001

10000000

------------

10000001 which is 129.
Run Code Online (Sandbox Code Playgroud)

尝试输入input.setInputType(129);,你会发现它会起作用.:)


Jos*_*seF 15

我认为你使用的是错误的功能.我这样做并完美地工作:

passwordEditView = (EditText) rootView.findViewById(R.id.password);
final CheckBox showPasswordCheckBox = (CheckBox) rootView.findViewById(R.id.checkbox);
showPasswordCheckBox.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        if (showPasswordCheckBox.isChecked()){
            passwordEditView.setTransformationMethod(null);
        }else{
            passwordEditView.setTransformationMethod(new PasswordTransformationMethod());
       }
    }
});
Run Code Online (Sandbox Code Playgroud)


小智 7

这可能会帮助你交配

checkBox.setOnCheckedChangeListener(new OnCheckedChangeListener() {

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