Show the password with EditText

前端 未结 12 909
旧时难觅i
旧时难觅i 2021-01-30 22:04

I use an EditText to enter password. And a CheckBox to show password or not. Below function is the part:

public void ShowPassword() {
    if (cb.isChecked()) {
          


        
相关标签:
12条回答
  • 2021-01-30 22:27

    I think you are using the wrong function. I make that way and work perfectly:

    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());
           }
        }
    });
    
    0 讨论(0)
  • 2021-01-30 22:28

    The Password Visibility Toggle feature has been added to support library version 24.2.0 enabling you to toggle the password straight from the password field without the need for a CheckBox.

    You can make that work basically by setting an inputType of password on the TextInputEditText. Here's how to do that:

    <android.support.design.widget.TextInputLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content">
    
            <android.support.design.widget.TextInputEditText
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:hint="@string/password"
                android:inputType="textPassword"/>
    </android.support.design.widget.TextInputLayout>
    
    0 讨论(0)
  • 2021-01-30 22:29

    I don't know exactly the specifics, but this code should work:

    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 is the input type set when setting android:inputType="textPassword"

    edit:

    as mentioned in @user370305's answer, 129 is the value of the bitwise or operation when you do

    password.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD);
    
    0 讨论(0)
  • 2021-01-30 22:33

    okay:

    To show readeable text:

    setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD)
    

    To "star" the password:

    setInputType(InputType.TYPE_TEXT_VARIATION_PASSWORD)
    

    But why? The Type_Text_Variation_Password set it to stars, but why does only adding Type_Claas_Text revive the visibel password?
    I would have thought that Type_Text_Variation_VISIBLE_Password comes into play ...

    0 讨论(0)
  • 2021-01-30 22:38

    use app:passwordToggleEnabled = true; available from Android support library version 24.2.0.

      <android.support.design.widget.TextInputLayout
        android:id="@+id/input_layout_password"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:visibility="gone"
        app:passwordToggleEnabled="true"
        tools:visibility="visible"
        android:layout_marginBottom="@dimen/space_medium">
    
        <android.support.design.widget.TextInputEditText
            android:id="@+id/input_password"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:inputType="textPassword"
            android:imeOptions="actionDone"
            android:imeActionLabel="@string/btn_sign_in"
            android:hint="@string/hint_password" />
    
    </android.support.design.widget.TextInputLayout>
    
    0 讨论(0)
  • 2021-01-30 22:38

    on the off chance that you are using Xamarin (Visual Studio Mac as it's now called) you can achieve it this way (I used a Switch)

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

    Then on your Switch .click do something like this

    switch.Click += delegate {
                TogglePassword(textView, switch.Checked);
            };
    
    0 讨论(0)
提交回复
热议问题