Intereting Posts
Android установлен в одном действии, а затем появляется кнопка в другой активности Как классифицировать Android-устройства на основе значений DPI? Обратный вызов загрузки изображения Picasso Android-камера android.hardware.Camera устарела Несколько страниц одновременно на ViewPager Повторное подключение эмулятора к Eclipse Преобразование временной метки в виде строки в android Как я могу удалить OnClickListeners из ViewHolders RecyclerView при их удалении? Android, как стиль SearchView в панели действий? Как я могу сделать ширину счетчика равной самой большой доступной ширине элемента Как оставаться в позиции прокрутки в RecyclerView после добавления элементов в свой первый индекс и вызывать notifydatasetchange «Аргумент« контекст »не может быть нулевым» Перехват Android SMS без значка уведомления или сообщений WAP-PUSH Измените цвет фона счетчика, но держите стрелку Пользовательские команды для Google Now

Программно изменить тип ввода EditText с PASSWORD на NORMAL и наоборот

В моем приложении у меня есть EditText которого тип ввода по умолчанию установлен как android:inputType="textPassword" по ошибке. У него есть CheckBox справа, который проверяется, изменяет тип ввода этого EditText на NORMAL PLAIN TEXT. Код для этого –

password.setInputType(InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD);

Моя проблема заключается в том, что если этот CheckBox не установлен, он должен снова установить тип ввода в PASSWORD. Я сделал это с помощью –

password.setInputType(InputType.TYPE_TEXT_VARIATION_PASSWORD);

Но текст внутри этого edittext все еще виден. И для удивления, когда я меняю ориентацию, он автоматически устанавливает тип ввода в ПАРОЛЬ, а текст внутри маркируется (отображается как пароль).

Любой способ добиться этого?

Solutions Collecting From Web of "Программно изменить тип ввода EditText с PASSWORD на NORMAL и наоборот"

Просто для людей, которые испытывают такую ​​же проблему. Просто добавьте дополнительный атрибут к этому EditText программно, и все готово.

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

Кроме того, убедитесь, что курсор находится в конце текста в EditText. Поскольку, когда вы меняете тип ввода, курсор будет автоматически установлен на начальную точку. Поэтому я предлагаю использовать следующий код:

 et_password.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD); et_password.setSelection(et_password.getText().length()); 

При использовании привязки данных вы можете использовать следующий код

 <data> <import type="android.text.InputType"/> . . . <EditText android:inputType='@{someViewModel.isMasked ? (InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD) : InputType.TYPE_CLASS_TEXT }' 

Используйте этот код, чтобы сменить пароль на текст и наоборот

 mCbShowPwd.setOnCheckedChangeListener(new OnCheckedChangeListener() { public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { // checkbox status is changed from uncheck to checked. if (!isChecked) { // show password mEtPwd.setTransformationMethod(PasswordTransformationMethod.getInstance()); } else { // hide password mEtPwd.setTransformationMethod(HideReturnsTransformationMethod.getInstance()); } } }); 

Для полного кода примера см. http://www.codeproject.com/Tips/518641/Show-hide-password-in-a-edit-text-view-password-ty

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

Метод выше не работает для меня. Ответ ниже работает для 2.2 sdk.

password.setTransformationMethod (PasswordTransformationMethod.getInstance ());

Установить inputType для EditText?

 Checkbox.setOnCheckedChangeListener(new OnCheckedChangeListener() { public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { // checkbox status is checked. if (isChecked) { //password is visible PasswordField.setTransformationMethod(HideReturnsTransformationMethod.getInstance()); } else { //password gets hided passwordField.setTransformationMethod(PasswordTransformationMethod.getInstance()); } } }); 

Еще один простой пример использования ImageView для переключения видимости с меньшим количеством кода из-за единственного назначения InputType нам нужен только оператор равенства:

 EditText inputPassword = (EditText) findViewById(R.id.loginPassword); ImageView inputPasswordShow = (ImageView) findViewById(R.id.imagePasswordShow); inputPasswordShow.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { if(inputPassword.getInputType() == InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD) { inputPassword.setInputType( InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD); }else { inputPassword.setInputType( InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD ); } inputPassword.setSelection(inputPassword.getText().length()); } }); 

Замена:

 InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD 

С :

 InputType.TYPE_CLASS_TEXT 

Дает тот же результат, но более короткое слово.

Это сработало для меня:

 mytext.setInputType(InputType.TYPE_CLASS_NUMBER); 

Используйте этот код, чтобы сменить пароль на текст и наоборот. Этот код отлично работал для меня. Попробуй это..

 EditText paswrd=(EditText)view.findViewById(R.id.paswrd); CheckBox showpass=(CheckBox)view.findViewById(R.id.showpass); showpass.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { if(((CheckBox)v).isChecked()){ paswrd.setInputType(InputType.TYPE_CLASS_TEXT); }else{ paswrd.setInputType(InputType.TYPE_CLASS_TEXT|InputType.TYPE_TEXT_VARIATION_PASSWORD); } } }); 

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

Вы можете сделать это в основном, сначала обновив версию своей поддержки до 24.2.0, а затем установив 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> 

Вы можете получить дополнительную информацию о новой функции в документации разработчика для TextInputLayout .

Это полный обработчик onClick для изображения / кнопки для отображения / скрытия пароля.

  new OnClickListener() { @Override public void onClick(View v) { // current ursor position int cursorPosition = edtPassword.getSelectionStart(); // toggles the control variable isPassworsVisible = !isPassworsVisible; // sets the image toggler inside edit text passwordVisible.setImageDrawable(getResources().getDrawable(isPassworsVisible ? R.drawable.ic_eye_checked : R.drawable.ic_eye_unchecked)); // apply input type edtPassword.setInputType(isPassworsVisible ? InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD : InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD); // returns cursor to position edtPassword.setSelection(cursorPosition); } }; 

Мой поиск аналогичного решения для Visual Studio / Xamarin приводит меня к этой теме. Ниже я работал с Хамарином. Обратите внимание, что при переходе между режимами эта реализация сохраняет флаг TYPE_TEXT_FLAG_NO_SUGGESTIONS .

EditText et = FindViewById<EditText>(Resource.Id.ET);

Чтобы показать символы: et.InputType = Android.Text.InputTypes.TextVariationVisiblePassword | Android.Text.InputTypes.TextFlagNoSuggestions; et.InputType = Android.Text.InputTypes.TextVariationVisiblePassword | Android.Text.InputTypes.TextFlagNoSuggestions;

Чтобы скрыть символы: et.InputType = Android.Text.InputTypes.TextVariationPassword | Android.Text.InputTypes.ClassText; et.InputType = Android.Text.InputTypes.TextVariationPassword | Android.Text.InputTypes.ClassText;

Чтобы установить позицию для завершения: int position = et.Text.Length; et.SetSelection(position, position);

holder.edit_pin.setInputType(InputType.TYPE_CLASS_NUMBER); динамическая ситуация holder.edit_pin.setInputType(InputType.TYPE_CLASS_NUMBER); Не будут работать так лучше, как это

 holder.edit_pin.setInputType(InputType.TYPE_CLASS_NUMBER); holder.edit_pin.setTransformationMethod(PasswordTransformationMethod.getInstance()); 

Примечание: это подходит, когда вы используете динамические элементы управления, например, используя arrayaapter

Начиная с Библиотеки поддержки v24.2.0. Вы можете достичь этого очень легко

То, что вам нужно сделать, это просто:

  1. Добавьте библиотеку дизайна в свои зависимости

     dependencies { compile "com.android.support:design:25.1.0" } 
  2. Использовать TextInputEditText в сочетании с TextInputLayout

     <android.support.design.widget.TextInputLayout android:id="@+id/etPasswordLayout" android:layout_width="match_parent" android:layout_height="wrap_content" app:passwordToggleEnabled="true"> <android.support.design.widget.TextInputEditText android:id="@+id/etPassword" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="@string/password_hint" android:inputType="textPassword"/> </android.support.design.widget.TextInputLayout> 

Атрибут passwordToggleEnabled будет включать отображение пароля

  1. В корневом макете не забудьте добавить xmlns:app="http://schemas.android.com/apk/res-auto"

  2. Вы можете настроить свой пароль, используя:

app:passwordToggleDrawable – Возможность использования в качестве значка переключения ввода пароля.
app:passwordToggleTint – значок, используемый для переключения видимости ввода пароля.
app:passwordToggleTintMode – Режим наложения, используемый для применения фонового оттенка.

Подробнее в документации TextInputLayout . Введите описание изображения здесь

Я меняю тип ввода на свой флажок, поэтому на моем OnCheckedChangeListener я делаю:

 passwordEdit.setInputType(InputType.TYPE_CLASS_TEXT| (isChecked? InputType.TYPE_TEXT_VARIATION_PASSWORD|~InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD : InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD)); 

И это наконец сработало.

Похоже на логическую проблему с TYPE_TEXT_VARIATION_VISIBLE_PASSWORD . Инвертируйте флаг, и он должен устранить проблему.

В твоем случае:

 password.setInputType(InputType.TYPE_TEXT_VARIATION_PASSWORD|~InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD); 

Я бы удалил android:inputType="textPassword" из вашего макета. Вот почему он переключается обратно на пароль при изменении ориентации. Потому что каждый раз, когда ориентация меняется, вид воссоздается.

Что касается первой проблемы, попробуйте это:

 String text = password.getText(); password.setText(""); password.setInputType(InputType.TYPE_TEXT_VARIATION_PASSWORD); password.setText(text); 

В основном, выгружая текст перед изменением типа ввода, а затем добавьте его обратно.

Просто добавьте комментарий к правильному ответу, предоставленному @Rajkiran, вы можете добавить

 etPassword.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS); 

В состояние NORMAL, чтобы пользователи не были раздражены автоматическим предложением клавиатуры

Полный код, если вы хотите применить видимость пароля в тексте редактирования пароля.

Создание дескриптора [Любой доступный или флажок]

По щелчку или по проверке / снятию отметки напишите это:

  if (edittext.getInputType() == (InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD )){ edittext.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD ); }else{ edittext.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD ); } 

Не забудьте написать эту строку:

  edittext.setSelection(edittext.getText().length()); 

Он сбрасывает курсор в конец строки.

Blockquote

Final int [] count = {0};

  showandhide.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if(count[0] ==0) { password.setInputType(InputType.TYPE_TEXT_VARIATION_PASSWORD); count[0]++; } else { password.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD); showandhide.setText("Hide"); count[0]--; } } });