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

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

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

Это не ответ,

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

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

 password.setInputType(129); 

на самом деле,

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

'|' Не является трубой , это 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); Вместо этого вы увидите, что это сработает. 🙂

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

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

Функция добавления видимости пароля была добавлена ​​для поддержки версии 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> 

Вместо видимого пароля, вы можете попробовать с 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())

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> 

На случай, если вы используете 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); }; 

Хорошо:

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

 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 вступает в игру …

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