Подтвердить что ты не робот

Показывать пароль с помощью 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);
    }
}

Когда он установлен, он показывает пароль. Но когда он не проверяется, он показывает звезды. Как изменить его, чтобы показать звезду, пока cb не отмечен?

4b9b3361

Ответ 1

Я точно не знаю специфику, но этот код должен работать:

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"

изменить:

как указано в ответе @user370305, 129 - это значение побитового или операции, когда вы делаете

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

Ответ 2

Это не ответ,

Ответ уже дан и принят.

Я просто хочу уточнить о 129

password.setInputType(129);

Действительно,

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

'|' не является каналом, это a bitwise OR. Он принимает два двоичных числа, и если один из бит равного значения равен 1,

Как это относится к типу ввода: каждый из InputTypes на самом деле просто ints. TYPE_CLASS_TEXT is 1 и TYPE_TEXT_VARIATION_PASSWORD is 128 (or 10000000).

Выполните на них bitwise OR:

00000001

10000000

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

10000001 which is 129.

Попробуйте ввести input.setInputType(129); вместо этого, вы увидите, что это сработает.:)

Ответ 3

Я думаю, что вы используете неправильную функцию. Я делаю так и отлично работаю:

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

Ответ 4

Это может помочь вам спарить

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

Ответ 5

Функция поддержки видимости пароля была добавлена ​​для поддержки версии библиотеки 24.2.0, позволяющей вам переключаться с паролем прямо из поля пароля без необходимости в CheckBox.

Вы можете сделать эту работу в основном, установив inputType пароля на TextInputEditText. Вот как это сделать:

<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>

Ответ 6

вместо видимого пароля, вы можете попробовать с TYPE_TEXT_VARIATION_NORMAL

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

Ответ 7

Вызвать этот метод внутри 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())

Ответ 8

use app: passwordToggleEnabled = true; доступный из библиотеки поддержки Android версии 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>

Ответ 9

В случае, если вы используете Xamarin (Visual Studio Mac, как он теперь называется), вы можете достичь этого таким образом (я использовал коммутатор)

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

Затем на вашем коммутаторе .click сделайте что-то вроде этого

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

Ответ 10

Это будет работать -

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

Ответ 11

в порядке:

Чтобы отобразить текст, возвращаемый повторно:

setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD)

Чтобы "запустить" пароль:

setInputType(InputType.TYPE_TEXT_VARIATION_PASSWORD)

Но почему? Type_Text_Variation_Password установить его на звезды, но почему добавляет только Type_Claas_Text для восстановления пароля visibel?
Я бы подумал, что Type_Text_Variation_VISIBLE_Password вступает в игру...

Ответ 12

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

}