使用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的情况下修改它以显示星标?

  • Android文本input布局
  • Android的EditText不是多行
  • Android拦截editText粘贴\ copy \ cut
  • Android Moneyinput固定小数
  • 自定义旋转的EditText视图,包含工作选择,光标位置等
  • 将阴影效果添加到EditText字段
  • Android从EditText隐藏软键盘,同时不丢失光标
  • 如何使Android EditText中的每个字母大写?
  • 我不确切知道具体细节,但这段代码应该有效:

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