Як перемикатися між захованням та переглядом пароля


176

Чи є розумний спосіб дозволити користувачеві перемикатися між паролем приховування та перегляду в android EditText? Кілька програм на базі ПК дозволяють користувачеві це робити.

Відповіді:


155

Ви можете динамічно змінювати атрибути TextView. Якщо ви встановите XML Atrribute android:passwordна істинне, у представленні буде показано крапки, якщо ви встановите його на false, відображається текст.

За допомогою методу setTransformationMethod ви повинні мати можливість змінити ці атрибути з коду. (Відмова: Я не перевіряв, чи цей метод все ще працює після відображення перегляду. Якщо у вас виникли проблеми з цим, залиште мені коментар для мене.)

Повний зразок коду був би

yourTextView.setTransformationMethod(new PasswordTransformationMethod());

щоб приховати пароль. Щоб показати пароль, ви можете встановити один із існуючих методів перетворення або реалізувати порожній TransformationMethod , який нічого не робить із введеним текстом.

yourTextView.setTransformationMethod(new DoNothingTransformation());

61
Щоб показати пароль, вам не потрібно робити ніяких нових класів. Просто зателефонуйте setTransformationMethod(null).
Метт Квіглі

4
@Janusz, використання наведеного нижче дасть рішення gud. setTransformationMethod (PasswordTransformationMethod.getInstance ()); і setTransformationMethod (HideReturnsTransformationMethod.getInstance ());
sujith s

@Janusz, але як отримати клавіші показу / приховування на клавіатурі?
Нарендра Сінгх

при виклику setTransformationMethod на EditeText викликається зворотний виклик EditText на onTextChanged ... чи можливо цього не сталося?
циро

1
Правильно. Ключовим є "setTransformationMethod (). Все, що вам потрібно, - це переключення у вашому слухачі: etPassword.setTransformationMethod (null) / etPassword.setTransformationMethod (новий парольTransformationMethod ()). За замовчуванням встановіть у своєму xml EditView" android: inputType = "textPassword ""
Серхіо

303

Це дійсно легко досягти, оскільки Бібліотека підтримки v24.2.0.

Що вам потрібно зробити, це просто:

  1. Додайте бібліотеку дизайну до своїх залежностей

    dependencies {
         compile "com.android.support:design:24.2.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:layout_marginBottom="@dimen/login_spacing_bottom">
    
        <android.support.design.widget.TextInputEditText
            android:id="@+id/etPassword"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:hint="@string/fragment_login_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 .

введіть тут опис зображення

Для AndroidX

  • Замініть android.support.design.widget.TextInputLayoutнаcom.google.android.material.textfield.TextInputLayout

  • Замініть android.support.design.widget.TextInputEditTextнаcom.google.android.material.textfield.TextInputEditText


У версії 25.1.0 у мене дивна поведінка: він показує зміну пароля один раз, але якщо натиснути його, він зникне o_O '
MiguelHincapieC

1
Так, також є деякі примхи з android:textатрибутом TextInputEditText. Ви завжди можете порушити проблему в Google
ммБ

1
@ Delta7 Є деякі шляхи та шляхи вирішення. Будь ласка, поставте питання на ТАК, вставте посилання тут, і я спробую вам допомогти.
ммБа

1
Дякую. Однак у моїй збірці графіка шоу / приховування дивно повертається із екрана екрана - він показує перекреслене око, коли прихований пароль - я думаю, хтось вирішив, що кнопки повинні показувати поточний стан замість дії (або стан цілі).
Джош Саттерфілд

1
@JoshSutterfield згоден. тому, якщо ми хочемо натиснути кнопку дії, нам доведеться повернути її вручну, використовуючи app:passwordToggleDrawable(застаріле), а app:endIconDrawableпотім використовувати користувальницький малюнок, як <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:drawable="@drawable/ic_eye_close" android:state_checked="true"/> <item android:drawable="@drawable/ic_eye_open"/> </selector> я думаю, Google повинен виправити цю поведінку. Гарна дискусія
Рахмат Іхсан

112

Щоб показати точки замість пароля, встановіть PasswordTransformationMethod:

yourEditText.setTransformationMethod(new PasswordTransformationMethod());

звичайно, ви можете встановити це за замовчуванням у вашому елементі edittext у форматі xml за допомогою

android:password

Щоб повторно показати читабельний пароль, просто переведіть null як метод перетворення:

yourEditText.setTransformationMethod(null);

7
android:passwordзараз застаріло, і вам слід скористатися android:inputTypeзамість цього.
Вілька

54
Ви також можете порадувати своїх користувачів, зберігаючи позицію курсора перед встановленням способу перетворення та відновлення після нього. Використовуйте editText.getSelectionStart()і editText.getSelectionEnd()для збереження положення курсору, і editText.setSelection(start, end)для його відновлення.
Мостафа

2
@Wilka: android: inputType НЕ дозволяє перемикатися між двома станами під час виконання. Це дозволяє вам перемикатися лише один раз, і як тільки ви його зміните, ви не можете змінити його назад. І ні, setTransformationMethod НЕ застарілий.
AndroidDev

@Qlimax, але як отримати клавіші показу / приховування на клавіатурі?
Нарендра Сінгх

@DroidWormNarendra ви зазвичай приєднуєте слухача події до "зображення очей" між введенням пароля або всередині вводу пароля, як пояснено тут: stackoverflow.com/questions/3554377/… . Тоді в цьому випадку слухач може показати / приховати пароль. AFAIK не можна мати клавіші показу / приховування на клавіатурі
Qlimax

82

Показати:

editText.setInputType(InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD);

Ховатися:

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

Після скидання кожного з них курсор:

editText.setSelection(editText.length());

Тестований на Android 4.3 і 5.0, чудово працює! Документи виглядають так, що це має працювати аж до API 3 до.
Джеймс

@MattLogan, але як отримати клавіші показу / приховування на клавіатурі?
Нарендра Сінгх

5
Це найвідповідальна відповідь тут. Дякую. (дивно, що це не прийнято)
Тіна

Схоже, це не працює при зміні під час виконання. Він також не відновить останню позицію / вибір курсора користувача, якщо не в кінці рядка.
Том

31

Можна використовувати app:passwordToggleEnabled="true"

ось приклад, наведений нижче

<android.support.design.widget.TextInputLayout
        android:id="@+id/password"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:passwordToggleEnabled="true"
        android:textColorHint="@color/colorhint"
        android:textColor="@color/colortext">

Сьогодні він повинен бути кращим у використанні відповіді
Руслан Берозов

Це збільшує висоту огляду в моєму випадку. Чи є який-небудь спосіб видалити накладки з перемикання.
Садда

Це застаріло в матеріальних компонентах. Використовуйте app:endIconMode="password_toggle".
Ніколя

13

Використовуйте прапорець і відповідно змініть тип введення.

public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
    int start,end;
    Log.i("inside checkbox chnge",""+isChecked);
    if(!isChecked){
        start=passWordEditText.getSelectionStart();
        end=passWordEditText.getSelectionEnd();
        passWordEditText.setTransformationMethod(new PasswordTransformationMethod());;
        passWordEditText.setSelection(start,end);
    }else{
        start=passWordEditText.getSelectionStart();
        end=passWordEditText.getSelectionEnd();
        passWordEditText.setTransformationMethod(null);
        passWordEditText.setSelection(start,end);
    }
}

8
private boolean isPasswordVisible;

private TextInputEditText firstEditText;

...

firstEditText = findViewById(R.id.et_first);

...

    private void togglePassVisability() {
    if (isPasswordVisible) {
        String pass = firstEditText.getText().toString();
        firstEditText.setTransformationMethod(PasswordTransformationMethod.getInstance());
        firstEditText.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD);
        firstEditText.setText(pass);
        firstEditText.setSelection(pass.length());           
    } else {
        String pass = firstEditText.getText().toString();
        firstEditText.setTransformationMethod(HideReturnsTransformationMethod.getInstance());
        firstEditText.setInputType(InputType.TYPE_CLASS_TEXT);
        firstEditText.setText(pass);
        firstEditText.setSelection(pass.length());
    }
    isPasswordVisible= !isPasswordVisible;
}

Не потрібно встановлювати текст знову лише зателефонувати firstEditText.invalidate ();
Gunavant Patel

7

Це для мене робота. Це вам точно допоможе

showpass.setOnCheckedChangeListener(new OnCheckedChangeListener() {

            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                    if(!isChecked){

                    // show password
                    password_login.setTransformationMethod(PasswordTransformationMethod.getInstance());

                    Log.i("checker", "true");
                }

                else{
                    Log.i("checker", "false");

                     // hide password
    password_login.setTransformationMethod(HideReturnsTransformationMethod.getInstance());
                }

            }
        });

5

Я відчуваю, що хочу відповісти на це питання навіть там, де є кілька хороших відповідей,

відповідно до документації TransformationMethod виконують нашу місію

Метод трансформації

TextView використовує TransformationMethods, щоб виконувати такі дії, як заміна символів паролів крапками або збереження символів нового рядка від спричинення розривів рядків у однорядних текстових полях.

Зауважте, я використовую ніж для масла, але це те саме, якщо користувач перевірить показ пароля

@OnCheckedChanged(R.id.showpass)
    public void onChecked(boolean checked){
        if(checked){
            et_password.setTransformationMethod(null);
        }else {
            et_password.setTransformationMethod(new PasswordTransformationMethod());
            
        }
       // cursor reset his position so we need set position to the end of text
        et_password.setSelection(et_password.getText().length());
    }

5

Я можу додати код ShowPassword / HidePassword лише з кількох рядків, що містяться в блоці:

protected void onCreate(Bundle savedInstanceState) {
    ...
    etPassword = (EditText)findViewById(R.id.password);
    etPassword.setTransformationMethod(new PasswordTransformationMethod()); // Hide password initially

    checkBoxShowPwd = (CheckBox)findViewById(R.id.checkBoxShowPwd);
    checkBoxShowPwd.setText(getString(R.string.label_show_password)); // Hide initially, but prompting "Show Password"
    checkBoxShowPwd.setOnCheckedChangeListener( new CompoundButton.OnCheckedChangeListener() {
        public void onCheckedChanged(CompoundButton arg0, boolean isChecked) {
            if (isChecked) {
                etPassword.setTransformationMethod(null); // Show password when box checked
                checkBoxShowPwd.setText(getString(R.string.label_hide_password)); // Prompting "Hide Password"
            } else {
                etPassword.setTransformationMethod(new PasswordTransformationMethod()); // Hide password when box not checked
                checkBoxShowPwd.setText(getString(R.string.label_show_password)); // Prompting "Show Password"
            }
        }
    } );
    ...

5

У мене було те саме питання, і це дуже легко здійснити.

Все, що вам потрібно зробити, це загорнути своє поле EditText у (com.google.android.material.textfield.TextInputLayout) і в цьому додати (додаток: passwordToggleEnabled = "true").

Це покаже око в полі EditText, і при натисканні на нього пароль з’явиться і зникне при повторному натисканні.

<com.google.android.material.textfield.TextInputLayout
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:textColorHint="#B9B8B8"
                app:passwordToggleEnabled="true">

                <EditText
                    android:id="@+id/register_password"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:layout_marginLeft="24dp"
                    android:layout_marginRight="44dp"
                    android:backgroundTint="#BEBEBE"
                    android:hint="Password"
                    android:inputType="textPassword"
                    android:padding="16dp"
                    android:textSize="18sp" />
            </com.google.android.material.textfield.TextInputLayout>

4
private int passwordNotVisible=1; 
  @Override
  protected void onCreate(Bundle savedInstanceState) {
 showPassword = (ImageView) findViewById(R.id.show_password);
    showPassword.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            EditText paswword = (EditText) findViewById(R.id.Password);
            if (passwordNotVisible == 1) {
                paswword.setInputType(InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD);
                passwordNotVisible = 0;
            } else {

                paswword.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD);
                passwordNotVisible = 1;
            }


            paswword.setSelection(paswword.length());

        }
    });
}

4

У дуже простому вигляді:

private fun updatePasswordVisibility(editText: AppCompatEditText) {
        if (editText.transformationMethod is PasswordTransformationMethod) {
            editText.transformationMethod = null
        } else {
            editText.transformationMethod = PasswordTransformationMethod()
        }
        editText.setSelection(editText.length())
    }

Сподіваюся, це допомагає.


3

Ви можете показати / приховати пароль, використовуючи цей код нижче:

XML КОД:

<EditText
        android:id="@+id/etPassword"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="21dp"
        android:layout_marginTop="14dp"
        android:ems="10"
        android:inputType="textPassword" >
        <requestFocus />
    </EditText>
    <CheckBox
        android:id="@+id/cbShowPwd"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/etPassword"
        android:layout_below="@+id/etPassword"
        android:text="@string/show_pwd" />

КОД JAVA:

EditText mEtPwd;
CheckBox mCbShowPwd;


mEtPwd = (EditText) findViewById(R.id.etPassword);
mCbShowPwd = (CheckBox) findViewById(R.id.cbShowPwd);

mCbShowPwd.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
    @Override
    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());
        }
    }
});

3

Спробуйте це:

Спочатку визначте прапор таким глобальним:

private boolean isShowPassword = false;

І налаштуйте слухача на обробку кнопки "Показати та заховати пароль":

imgPassword.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (isShowPassword) {
                    etPassword.setTransformationMethod(new PasswordTransformationMethod());
                    imgPassword.setImageDrawable(getResources().getDrawable(R.drawable.ic_eye_hide));
                    isShowPassword = false;
                }else{
                    etPassword.setTransformationMethod(null);
                    imgPassword.setImageDrawable(getResources().getDrawable(R.drawable.ic_eye_show));
                    isShowPassword = true;
                }
            }
        });

2

Спробуйте https://github.com/maksim88/PasswordEditText проект в github. Вам навіть не потрібно змінювати код Java, використовуючи його. Просто змінити

EditText

до

com.maksim88.passwordedittext.PasswordEditText

у вашому XML-файлі.


Чи маєте ви уявлення про те, як використовувати setError з цим компонентом, після позначення помилки значок шоу / приховування стає невидимим
guisantogui

2

показати та приховати пароль Edit_Text за допомогою прапорця

XML

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent"
    android:layout_height="match_parent">

    <EditText
        android:inputType="textPassword"
        android:id="@+id/edtPass"
        android:textSize="20dp"
        android:hint="password"
        android:padding="20dp"
        android:background="#efeaea"
        android:layout_width="match_parent"
        android:layout_margin="20dp"
        android:layout_height="wrap_content" />

    <CheckBox
        android:background="#ff4"
        android:layout_centerInParent="true"
        android:textSize="25dp"
        android:text="show password"
        android:layout_below="@id/edtPass"
        android:id="@+id/showPassword"
        android:layout_marginTop="20dp"
        android:layout_width="wrap_content"
        android:gravity="top|right"
        android:layout_height="wrap_content" />

</RelativeLayout>

код Java

package com.example.root.sql2;

import android.annotation.SuppressLint;
import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.AppCompatCheckBox;
import android.support.v7.widget.Toolbar;
import android.text.method.HideReturnsTransformationMethod;
import android.text.method.PasswordTransformationMethod;
import android.view.View;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.EditText;

public class password extends AppCompatActivity {


    EditText password;
    CheckBox show_hide_password;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.hide);
        findViewById();
        show_hide_pass();



    }//end onCreate



    public void show_hide_pass(){
        show_hide_password.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
                if (!b){
                    // hide password
                    password.setTransformationMethod(PasswordTransformationMethod.getInstance());

                }else{
                    // show password
                    password.setTransformationMethod(HideReturnsTransformationMethod.getInstance());
                }
            }
        });
    } // end show_hide_pass




    public void findViewById(){ //  find ids ui and
        password = (EditText) findViewById(R.id.edtPass);
        show_hide_password = (CheckBox) findViewById(R.id.showPassword);
    }//end findViewById



}// end class

2

Ви пробували з setTransformationMethod? Він успадковується від TextView і хоче параметр TransformationMethod як параметр.

Більше про TransformationMethods ви можете знайти тут .

Він також має деякі цікаві функції, наприклад, заміна символів.


2
Посилання у відповіді мертве - "Код статусу: 404 не знайдено" .
Панг

developer.android.com/reference/android/text/method/… може бути кращим URL для отримання інформації про методи трансформації Android.
Містер Дрю

1

Що я і робив

  1. Створіть режим редагування тексту та звичайний вигляд тексту
  2. Зробіть їх перекриття один з одним за допомогою макета обмежень (як і екран входу в додаток Facebook)
  3. Приєднайте onClickListener до звичайного перегляду тексту, щоб він відповідно змінив тип введення тексту редагування тексту (Видимий / Невидимий)

Ви можете ознайомитись з цим відео для більш детальних кроків та пояснень https://youtu.be/md3eVaRzdIM

Сподіваюся, це допомагає :)


1

Ось моє рішення без використання TextInputEditText та методу трансформації.

XML

<LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical">

        <TextView
            style="@style/FormLabel"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="@string/username" />

        <EditText
            android:id="@+id/loginUsername"
            style="@style/EditTextStyle"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:drawableLeft="@drawable/ic_person_outline_black_24dp"
            android:drawableStart="@drawable/ic_person_outline_black_24dp"
            android:inputType="textEmailAddress"
            android:textColor="@color/black" />

        <TextView
            style="@style/FormLabel"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="20dp"
            android:text="@string/password" />

        <EditText
            android:id="@+id/loginPassword"
            style="@style/EditTextStyle"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:drawableEnd="@drawable/ic_visibility_off_black_24dp"
            android:drawableLeft="@drawable/ic_lock_outline_black_24dp"
            android:drawableRight="@drawable/ic_visibility_off_black_24dp"
            android:drawableStart="@drawable/ic_lock_outline_black_24dp"
            android:inputType="textPassword"
            android:textColor="@color/black" />
    </LinearLayout>

Java-код

boolean VISIBLE_PASSWORD = false;  //declare as global variable befor onCreate() 
loginPassword = (EditText)findViewById(R.id.loginPassword);
loginPassword.setOnTouchListener(new View.OnTouchListener() {
        public boolean onTouch(View v, MotionEvent event) {
            final int DRAWABLE_LEFT = 0;
            final int DRAWABLE_TOP = 1;
            final int DRAWABLE_RIGHT = 2;
            final int DRAWABLE_BOTTOM = 3;

            if (event.getAction() == MotionEvent.ACTION_UP) {
                if (event.getRawX() >= (loginPassword.getRight() - loginPassword.getCompoundDrawables()[DRAWABLE_RIGHT].getBounds().width())) {
                    // your action here
                    //Helper.toast(LoginActivity.this, "Toggle visibility");
                    if (VISIBLE_PASSWORD) {
                        VISIBLE_PASSWORD = false;
                        loginPassword.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD);
                        loginPassword.setCompoundDrawablesWithIntrinsicBounds(R.drawable.ic_lock_outline_black_24dp, 0, R.drawable.ic_visibility_off_black_24dp, 0);
                    } else {
                        VISIBLE_PASSWORD = true;
                        loginPassword.setInputType(InputType.TYPE_CLASS_TEXT);
                        loginPassword.setCompoundDrawablesWithIntrinsicBounds(R.drawable.ic_lock_outline_black_24dp, 0, R.drawable.ic_visibility_black_24dp, 0);
                    }
                    return false;
                }
            }
            return false;
        }
    });

1

Згідно з цим джерелом , якщо ви перенесли свій проект на AndroidX, його можна замінити

compile "com.android.support:design:24.2.0"

з

implementation "com.google.android.material:material:1.0.0"

Тоді все, що вам потрібно зробити, - це поставити код нижче до вашого файлу макета:

<com.google.android.material.textfield.TextInputLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    app:passwordToggleEnabled="true"
    android:hint="@string/hint_text">

  <com.google.android.material.textfield.TextInputEditText
      android:layout_width="match_parent"
      android:layout_height="wrap_content"/>

</com.google.android.material.textfield.TextInputLayout>

Більше інформації про матеріал TextInputLayoutможна знайти тут .

До цього джерела рекомендується перейти на AndroidX з бібліотеки підтримки Android:

AndroidX - це проект з відкритим кодом, який команда Android використовує для розробки, тестування, упаковки, версій та випуску бібліотек в рамках Jetpack.

AndroidX - це головне вдосконалення оригінальної бібліотеки підтримки Android. Як і Бібліотека підтримки, AndroidX поставляється окремо від ОС Android і забезпечує сумісність із зворотним зв'язком у версіях Android. AndroidX повністю замінює бібліотеку підтримки, надаючи паритет функцій та нові бібліотеки. Крім того, AndroidX включає такі функції:

Всі пакети в AndroidX живуть у послідовному просторі імен, починаючи з рядка androidx. Пакети бібліотеки підтримки були відображені у відповідні пакети androidx. * Повне відображення всіх старих класів та створення артефактів до нових див. На сторінці Package Refactoring.

На відміну від Бібліотеки підтримки, пакети AndroidX окремо підтримуються та оновлюються. У пакетах androidx використовується сувора семантична версія, починаючи з версії 1.0.0. Ви можете оновити бібліотеки AndroidX у своєму проекті самостійно.

Вся нова розробка Бібліотеки підтримки відбуватиметься в бібліотеці AndroidX. Сюди входить підтримка оригінальних артефактів бібліотеки підтримки та впровадження нових компонентів Jetpack.


1

Спочатку це екран, завантажений видимістю активів векторного зображення введіть тут опис зображення

при натисканні це змінить видимість цього зображення вимкнено введіть тут опис зображення

код для перемикача паролів вище (код xml)

<androidx.constraintlayout.widget.ConstraintLayout
    android:id="@+id/laypass"
    android:layout_width="330dp"
    android:layout_height="50dp"
    android:layout_marginTop="24dp"
    app:layout_constraintEnd_toEndOf="@+id/editText3"
    app:layout_constraintStart_toStartOf="@+id/editText3"
    app:layout_constraintTop_toBottomOf="@+id/editText3">

    <EditText
        android:id="@+id/edit_password"
        style="@style/EditTextTheme"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@drawable/round"
        android:drawableLeft="@drawable/ic_password"
        android:drawablePadding="10dp"
        android:ems="10"
        android:hint="Password"
        android:inputType="textPassword"
        android:paddingLeft="10dp"
        android:paddingRight="15dp"
        android:textColor="@color/cyan92a6"
        android:textColorHint="@color/cyan92a6"
        android:textCursorDrawable="@null"
        android:textSize="18sp"
        />

    <ImageView
        android:id="@+id/show_pass_btn"
        android:layout_width="40dp"
        android:layout_height="40dp"
        android:layout_alignParentRight="true"
        android:layout_centerVertical="true"
        android:layout_marginEnd="8dp"
        android:alpha=".5"
        android:onClick="ShowHidePass"
        android:padding="5dp"
        android:src="@drawable/ic_visibility"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="@+id/laypass"
        app:layout_constraintTop_toTopOf="@+id/edit_password" /> 
 </androidx.constraintlayout.widget.ConstraintLayout>

Java-код для роботи кнопки

public void ShowHidePass(View view) {

    if(view.getId()==R.id.show_pass_btn){
        if(edit_password.getTransformationMethod().equals(PasswordTransformationMethod.getInstance())){
            ((ImageView)(view)).setImageResource(R.drawable.ic_visibility_off);
            //Show Password
            edit_password.setTransformationMethod(HideReturnsTransformationMethod.getInstance());
        }
        else{
            ((ImageView)(view)).setImageResource(R.drawable.ic_visibility);
            //Hide Password
            edit_password.setTransformationMethod(PasswordTransformationMethod.getInstance());
        }
    }
}

0

У XML роблять так

    <LinearLayout
          android:layout_height="wrap_content"
          android:layout_width="fill_parent"
          android:orientation="vertical"
          >
          <RelativeLayout
              android:id="@+id/REFReLayTellFriend"
              android:layout_width="match_parent"
              android:layout_height="wrap_content"
              android:orientation="horizontal"
              >
          <EditText
              android:id="@+id/etpass1"
              android:layout_width="fill_parent"
              android:layout_height="wrap_content"
              android:background="@android:color/transparent"
              android:bottomLeftRadius="10dp"
              android:bottomRightRadius="50dp"
              android:fontFamily="@font/frutiger"
              android:gravity="start"
              android:inputType="textPassword"
              android:hint="@string/regpass_pass1"
              android:padding="20dp"
              android:paddingBottom="10dp"
              android:textColor="#000000"
              android:textColorHint="#d3d3d3"
              android:textSize="14sp"
              android:topLeftRadius="10dp"
              android:topRightRadius="10dp"/>
              <ImageButton
                  android:id="@+id/imgshowhide1"
                  android:layout_width="40dp"
                  android:layout_height="20dp"
                  android:layout_marginTop="20dp"
                  android:layout_marginRight="10dp"
                  android:background="@drawable/showpass"
                  android:layout_alignRight="@+id/etpass1"/>
          </RelativeLayout>    

 boolean show=true;
 //on image click inside password do this
 if(show){
                imgshowhide2.setBackgroundResource(0);
                imgshowhide2.setBackgroundResource(R.drawable.hide);
                etpass2.setInputType(InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD);
                etpass2.setSelection(etpass2.getText().length());

                show=false;
            }else{
                imgshowhide2.setBackgroundResource(0);
                imgshowhide2.setBackgroundResource(R.drawable.showpass);
                //etpass1.setInputType(InputType.TYPE_TEXT);
                etpass2.setInputType(InputType.TYPE_CLASS_TEXT |
                        InputType.TYPE_TEXT_VARIATION_PASSWORD);
                etpass2.setSelection(etpass2.getText().length());
                show=true;
            }

0

Моє розширення Kotlin. пишіть один раз, використовуйте всюди

fun EditText.tooglePassWord() {
this.tag = !((this.tag ?: false) as Boolean)
this.inputType = if (this.tag as Boolean)
    InputType.TYPE_TEXT_VARIATION_PASSWORD
else
    (InputType.TYPE_CLASS_TEXT or InputType.TYPE_TEXT_VARIATION_PASSWORD)

this.setSelection(this.length()) }

Ви можете зберігати цей метод у будь-якому файлі та використовувати його всюди, використовуючи його так

ivShowPassword.click { etPassword.tooglePassWord() }

де ivShowPassword натискається на перегляд image (око), а etPassword - Editext


0

Гарне рішення. Налаштуйте кнопку, а потім скористайтеся цим кодом:

public void showPassword(View v)
{

    TextView showHideBtnText = (TextView) findViewById(R.id.textView1);

    if(showHideBtnText.getText().toString().equals("Show Password")){
        password.setTransformationMethod(null);
        showHideBtnText.setText("Hide");
    } else{
        password.setTransformationMethod(new PasswordTransformationMethod());
        showHideBtnText.setText("Show Password");
    }


}

0

Додайте цей метод:

fun EditText.revertTransformation() {
    transformationMethod = when(transformationMethod) {
        is PasswordTransformationMethod -> SingleLineTransformationMethod.getInstance()
        else -> PasswordTransformationMethod.getInstance()
    }
}

Виклик його переключиться між станом типу введення (ви можете змінити однолінійне перетворення на улюблене). Приклад використання:

editText.revertTransformation()

0
1> Make a selector file "show_password_selector.xml".

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/pwd_hide"
        android:state_selected="true"/>
    <item android:drawable="@drawable/pwd_show"
        android:state_selected="false" />
</selector>

2>set "show_password_selector" file into imageview.

<ImageView
                        android:id="@+id/iv_pwd"
                        android:layout_width="@dimen/_35sdp"
                        android:layout_height="@dimen/_25sdp"
                        android:layout_alignParentRight="true"
                        android:layout_centerVertical="true"
                        android:layout_marginRight="@dimen/_15sdp"
                        android:src="@drawable/show_password_selector" />

3> put below code in java file.
  iv_new_pwd.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if (iv_new_pwd.isSelected()) {
                iv_new_pwd.setSelected(false);
                Log.d("mytag", "in case 1");
                edt_new_pwd.setInputType(InputType.TYPE_CLASS_TEXT);
            } else {
                Log.d("mytag", "in case 1");
                iv_new_pwd.setSelected(true);
                edt_new_pwd.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD);
            }
        }
    });

0
1> Make a selector file "show_password_selector.xml".

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/pwd_hide"
        android:state_selected="true"/>
    <item android:drawable="@drawable/pwd_show"
        android:state_selected="false" />
</selector>

2>set "show_password_selector" file into imageview.

<ImageView
                        android:id="@+id/iv_pwd"
                        android:layout_width="@dimen/_35sdp"
                        android:layout_height="@dimen/_25sdp"
                        android:layout_alignParentRight="true"
                        android:layout_centerVertical="true"
                        android:layout_marginRight="@dimen/_15sdp"
                        android:src="@drawable/show_password_selector" />

3> put below code in java file.
  iv_new_pwd.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if (iv_new_pwd.isSelected()) {
                iv_new_pwd.setSelected(false);
                Log.d("mytag", "in case 1");
                edt_new_pwd.setInputType(InputType.TYPE_CLASS_TEXT);
            } else {
                Log.d("mytag", "in case 1");
                iv_new_pwd.setSelected(true);
                edt_new_pwd.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD);
            }
        }
    });

-2
if (inputPassword.getTransformationMethod() == PasswordTransformationMethod.getInstance()) {
 //password is visible
                inputPassword.setTransformationMethod(HideReturnsTransformationMethod.getInstance());
            }
else if(inputPassword.getTransformationMethod() == HideReturnsTransformationMethod.getInstance()) {
 //password is hidden
                inputPassword.setTransformationMethod(PasswordTransformationMethod.getInstance());
            }
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.