Редактировать текст Password Toggle Android
Я пытаюсь показать пользователю введенный пароль в текстовом редакторе, тип ввода которого является текстовым паролем.
Я реализовал gesturelistener над иконкой переключения, как это -
public boolean onTouch(View view, MotionEvent motionEvent) {
switch (view.getId())
{
case R.id.ivPasswordToggle:
switch ( motionEvent.getAction() ) {
case MotionEvent.ACTION_DOWN:
Toast.makeText(getContext(),"show",Toast.LENGTH_SHORT).show();
etPassword.setInputType(InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD);
break;
case MotionEvent.ACTION_UP:
etPassword.setInputType(InputType.TYPE_TEXT_VARIATION_PASSWORD | InputType.TYPE_CLASS_TEXT);
Toast.makeText(getContext(),"hide",Toast.LENGTH_SHORT).show();
break;
}
break;
}
return true;
}
Я не знаю, что не так, любая помощь будет оценена.
Ответы
Ответ 1
Так как Библиотека поддержки v24.2.0. вы можете достичь этого очень легко
Что вам нужно сделать, просто:
-
Добавьте библиотеку дизайна к своим зависимостям
dependencies {
compile "com.android.support:design:25.1.0"
}
-
Используйте 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
приведет к отображению пароля.
-
В корневом макете не забудьте добавить xmlns:app="http://schemas.android.com/apk/res-auto"
-
Вы можете настроить свой пароль, используя:
app:passwordToggleDrawable
- Возможность использования в качестве значка переключения ввода пароля.
app:passwordToggleTint
- Значок, используемый для переключения видимости ввода пароля.
app:passwordToggleTintMode
- Режим наложения, используемый для применения фонового оттенка.
Подробнее в Документация TextInputLayout.
![введите описание изображения здесь]()
Ответ 2
Пожалуйста, попробуйте этот код.
public boolean onTouch(View view, MotionEvent motionEvent) {
switch (view.getId())
{
case R.id.ivPasswordToggle:
switch ( motionEvent.getAction() ) {
case MotionEvent.ACTION_DOWN:
Toast.makeText(getContext(),"show",Toast.LENGTH_SHORT).show();
etPassword.setTransformationMethod(HideReturnsTransformationMethod.getInstance());
break;
case MotionEvent.ACTION_UP:
etPassword.setTransformationMethod(PasswordTransformationMethod.getInstance());
Toast.makeText(getContext(),"hide",Toast.LENGTH_SHORT).show();
break;
}
break;
}
return true;
}
Я надеюсь, что это сработает, спасибо.
Ответ 3
Попробуйте использовать следующий метод. Здесь мы устанавливаем составной чертеж, который при нажатии будет показывать или скрывать пароль:
private boolean passwordShown = false;
private void addPasswordViewToggle() {
getPasswordEditText().setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
final int DRAWABLE_RIGHT = 2; //index
if (event.getAction() == MotionEvent.ACTION_UP) {
if (event.getRawX() >= (getPasswordEditText().getRight() - getPasswordEditText().getCompoundDrawables()[DRAWABLE_RIGHT].getBounds().width())) {
if (passwordShown) {
passwordShown = false;
// 129 is obtained by bitwise ORing InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD
getPasswordEditText().setInputType(129);
// Need to call following as the font is changed to mono-space by default for password fields
getPasswordEditText().setTypeface(Typeface.SANS_SERIF);
getPasswordEditText().setCompoundDrawablesWithIntrinsicBounds(0, 0, R.drawable.locked_icon, 0); // This is lock icon
} else {
passwordShown = true;
getPasswordEditText().setInputType(InputType.TYPE_TEXT_VARIATION_PASSWORD);
getPasswordEditText().setCompoundDrawablesWithIntrinsicBounds(0, 0, R.drawable.unlocked_icon, 0); // Unlock icon
}
return true;
}
}
return false;
}
});
}