使用EditText显示密码

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

public void ShowPassword() { if (cb.isChecked()) { password.setInputType(InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD); } else { password.setInputType(InputType.TYPE_TEXT_VARIATION_PASSWORD); } } 

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

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

 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); } } }); 

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

编辑:

正如在@ user370305的回答中提到的, 129是你做的按位或操作的值

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

这不是答案,

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

我只想澄清一下129

 password.setInputType(129); 

实际上是,

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

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

这与输入types有何关系:每个InputType实际上只是整数。 TYPE_CLASS_TEXT is 1TYPE_TEXT_VARIATION_PASSWORD is 128 (or 10000000)

对它们执行bitwise OR

 00000001 10000000 ------------ 10000001 which is 129. 

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

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

 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()); } } }); 

这可能会帮助你交配

 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()); } } }); 

密码可见性切换function已添加到支持库版本24.2.0,使您可以直接从密码字段切换密码,而无需CheckBox。

您可以通过在TextInputEditText上设置password的inputType来实现这一目的。 以下是如何做到这一点:

    

您可以尝试使用TYPE_TEXT_VARIATION_NORMAL而不是可见密码

 public void ShowPassword() { password.setInputType((cb.isChecked()) ? InputType.TYPE_TEXT_VARIATION_NORMAL : InputType.TYPE_TEXT_VARIATION_PASSWORD; } 

OnCheckedChangedListener调用此方法

  public static void toggleShowPassword(boolean show, EditText editText) { if (show) editText.setInputType(InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD); else editText.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD); editText.setSelection(editText.length()); } 

EditText光标在更改InputType后重置其位置,这就是我们添加最后一行editText.setSelection(editText.length())

使用app:passwordToggleEnabled = true; 可从Android支持库版本24.2.0获得。

     

这将有效 –

 public void ShowPassword() { if (cb.isChecked()) { password.setInputType(InputType.TYPE_CLASS_TEXT); } else { password.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD); } } 

如果您正在使用Xamarin(现在称为Visual Studio Mac),您可以通过这种方式实现它(我使用了Switch)

  ///  /// Toggles the password. ///  /// Field. /// If set to true is checked. private void TogglePassword(TextView field, bool isChecked) { /// masks with password character if (isChecked) { field.TransformationMethod = new PasswordTransformationMethod(); } /// unmasks password else { field.TransformationMethod = null; } 

然后在你的Switch .click做这样的事情

 switch.Click += delegate { TogglePassword(textView, switch.Checked); }; 

好的:

显示可重复文本:

 setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD) 

要“加盖”密码:

 setInputType(InputType.TYPE_TEXT_VARIATION_PASSWORD) 

但为什么? Type_Text_Variation_Password将其设置为星号,但为什么只添加Type_Claas_Text恢复Type_Claas_Text密码?
我原以为Type_Text_Variation_VISIBLE_Password会发挥作用……

 public void onCheckBox(View v2) { CheckBox cb = (CheckBox)this.findViewById(R.id.pass_Check); EditText et1=(EditText)this.findViewById(R.id.edt_Pass); if(cb.isChecked()) { et1.setInputType(InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD); } else { et1.setInputType(129); } }