Come passare da nascondi a Visualizza password


176

Esiste un modo intelligente per consentire all'utente di alternare tra nascondere e visualizzare la password in un EditText Android? Numerose app basate su PC consentono all'utente di farlo.

Risposte:


156

È possibile modificare dinamicamente gli attributi di un TextView. Se si imposta XML Atrribute android:passwordsu true, la vista mostrerebbe punti se si imposta su false il testo viene mostrato.

Con il metodo setTransformationMethod dovresti essere in grado di modificare questi attributi dal codice. (Dichiarazione di non responsabilità: non ho testato se il metodo funziona ancora dopo la visualizzazione della vista. Se riscontri problemi con ciò, lasciami un commento per farmelo sapere.)

Il codice di esempio completo sarebbe

yourTextView.setTransformationMethod(new PasswordTransformationMethod());

per nascondere la password. Per mostrare la password è possibile impostare uno dei metodi di trasformazione esistenti o implementare un TransformationMethod vuoto che non fa nulla con il testo di input.

yourTextView.setTransformationMethod(new DoNothingTransformation());

61
Per mostrare la password, non è necessario creare nuove classi. Chiama e basta setTransformationMethod(null).
Matt Quigley,

4
@ Janusz, l'uso di quanto segue fornirà la soluzione gud. setTransformationMethod (PasswordTransformationMethod.getInstance ()); e setTransformationMethod (HideReturnsTransformationMethod.getInstance ());
sujith s

@Janusz ma come ottenere i tasti mostra / nascondi nella tastiera?
Narendra Singh,

quando si chiama setTransformationMethod su un EditeText viene richiamato il callback onTextChanged di EditText ... è possibile che ciò non avvenga?
Tsiro,

1
Corretta. "SetTransformationMethod () è la chiave. Tutto ciò di cui hai bisogno è passare nel tuo listener: etPassword.setTransformationMethod (null) / etPassword.setTransformationMethod (new PasswordTransformationMethod ()). Per impostazione predefinita, imposta nel tuo xml EditView" android: inputType = "textPassword ""
Sergio,

303

È davvero facile da ottenere dalla Support Library v24.2.0.

Quello che devi fare è solo:

  1. Aggiungi la libreria di progettazione alle tue dipendenze

    dependencies {
         compile "com.android.support:design:24.2.0"
    }
  2. Utilizzare TextInputEditTextin combinazione conTextInputLayout

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

L' passwordToggleEnabledattributo farà il lavoro!

  1. Nel layout di root non dimenticare di aggiungere xmlns:app="http://schemas.android.com/apk/res-auto"

  2. Puoi personalizzare la tua password usando:

app:passwordToggleDrawable- Disegnabile da utilizzare come icona di attivazione / disattivazione della visibilità di immissione della password.
app:passwordToggleTint- Icona da utilizzare per attivare / disattivare la visibilità dell'immissione della password.
app:passwordToggleTintMode- Metodo di fusione utilizzato per applicare la tinta di sfondo.

Maggiori dettagli nella documentazione di TextInputLayout .

inserisci qui la descrizione dell'immagine

Per AndroidX

  • Sostituisci android.support.design.widget.TextInputLayoutconcom.google.android.material.textfield.TextInputLayout

  • Sostituisci android.support.design.widget.TextInputEditTextconcom.google.android.material.textfield.TextInputEditText


Nella versione 25.1.0 ho un comportamento strano: mostra una volta la password attiva ma se la premi scompare o_O '
MiguelHincapieC

1
Sì, ci sono anche alcune stranezze con android:textattributo attivo TextInputEditText. Puoi sempre sollevare un problema su Google Issues Tracker per Android
mmB

1
@ Delta7 Ci sono alcuni modi e soluzioni alternative. Per favore, fai la domanda su SO, incolla un link qui e cercherò di aiutarti.
mmB

1
Grazie. Tuttavia, nella mia build, la grafica mostra / nascondi è stranamente invertita dal tuo screenshot - mostra l'occhio barrato quando la password è nascosta - Immagino che qualcuno abbia deciso che i pulsanti dovrebbero mostrare lo stato corrente anziché l'azione (o lo stato dell'obiettivo).
Josh Sutterfield,

1
@JoshSutterfield sono d'accordo. quindi se vogliamo un pulsante di azione, dobbiamo invertirlo manualmente utilizzando app:passwordToggleDrawable(obsoleto) o app:endIconDrawablequindi utilizzare un disegno personalizzato come <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> penso che Google dovrebbe risolvere questo comportamento. Buona discussione
Rahmat Ihsan

112

Per mostrare i punti anziché la password, impostare PasswordTransformationMethod:

yourEditText.setTransformationMethod(new PasswordTransformationMethod());

ovviamente puoi impostarlo di default nell'elemento edittext nel layout xml con

android:password

Per mostrare nuovamente la password leggibile, basta passare null come metodo di trasformazione:

yourEditText.setTransformationMethod(null);

7
android:passwordè deprecato ora e dovresti usare android:inputTypeinvece.
Wilka,

54
Puoi anche rendere felici i tuoi utenti salvando la posizione del cursore prima di impostare il metodo di trasformazione e ripristinarlo dopo. Utilizzare editText.getSelectionStart()e editText.getSelectionEnd()per salvare la posizione del cursore e editText.setSelection(start, end)per ripristinarla.
Mostafa,

2
@Wilka: android: inputType NON ti consente di passare avanti e indietro tra i due stati in fase di esecuzione. Ti permette di cambiare solo una volta e una volta cambiato, non puoi cambiarlo indietro. E no, setTransformationMethod NON è deprecato.
AndroidDev

@Qlimax ma come ottenere i tasti mostra / nascondi nella tastiera?
Narendra Singh,

@DroidWormNarendra in genere si allega un listener di eventi a una "immagine dell'occhio" tra l'immissione della password o all'interno dell'immissione della password come spiegato qui: stackoverflow.com/questions/3554377/… . Quindi in questo listener di eventi puoi mostrare / nascondere la password. AFAIK non è possibile avere alcuni tasti mostra / nascondi nella tastiera
Qlimax

82

Mostrare:

editText.setInputType(InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD);

Nascondere:

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

Dopo ognuno di questi il ​​cursore viene ripristinato, quindi:

editText.setSelection(editText.length());

Testato su Android 4.3 e 5.0, funziona alla grande! I documenti fanno sembrare che questo dovrebbe funzionare fino all'API 3 a.
James,

@MattLogan ma come ottenere i tasti mostra / nascondi nella tastiera?
Narendra Singh,

5
Questa è la risposta più semplice qui. Grazie. (strano non è quello accettato)
Tina,

Questo non sembra funzionare quando modificato in fase di esecuzione. Inoltre, non ripristinerà la posizione / selezione dell'ultimo cursore dell'utente se non alla fine della riga.
Tom,

31

Puoi usare app:passwordToggleEnabled="true"

qui di seguito è riportato un esempio

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

Oggi è preferibile utilizzare la risposta
Ruslan Berozov,

Ciò aumenta l'altezza della vista nel mio caso. Esiste un modo per rimuovere l'imbottitura dalla levetta estraibile.
Sadda Hussain,

Questo è deprecato nei componenti materiali. Usa app:endIconMode="password_toggle".
Nicolas,

13

Utilizzare la casella di controllo e modificare il tipo di input di conseguenza.

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

Non è necessario impostare nuovamente il testo solo chiamare firstEditText.invalidate ();
Gunavant Patel,

7

Per me è un lavoro, questo ti aiuterà sicuramente

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

Sento di voler rispondere a questa domanda anche lì alcune buone risposte,

secondo la documentazione TransformationMethod facciamo la nostra missione

TransformationMethod

TextView utilizza TransformationMethods per fare cose come sostituire i caratteri delle password con punti o impedire ai caratteri di nuova riga di causare interruzioni di riga nei campi di testo a riga singola.

Nota che uso il coltello da burro, ma è lo stesso se l'utente controlla mostra password

@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

Sono in grado di aggiungere il codice ShowPassword / HidePassword con solo poche righe, indipendenti in un blocco:

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

Ho avuto lo stesso problema ed è molto facile da implementare.

Tutto quello che devi fare è racchiudere il campo EditText in un (com.google.android.material.textfield.TextInputLayout) e in quell'aggiunta (app: passwordToggleEnabled = "true").

Questo mostrerà l'occhio nel campo EditText e quando si fa clic su di esso, la password apparirà e scomparirà quando si fa di nuovo clic.

<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

In forma molto semplice:

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

Spero che sia d'aiuto.


3

Puoi MOSTRARE / NASCONDERE la password usando questo codice qui sotto:

CODICE 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" />

CODICE 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

Prova questo:

Per prima cosa definisci una bandiera come globale in questo modo:

private boolean isShowPassword = false;

E imposta l'ascoltatore per gestire tocca il pulsante Mostra e nascondi password:

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

Prova https://github.com/maksim88/PasswordEditText progetto su github. Non è nemmeno necessario modificare il codice Java utilizzandolo. Basta cambiare

Modifica il testo

tag a

com.maksim88.passwordedittext.PasswordEditText

nel tuo file XML.


Hai idea di come usare setError con questo componente, una volta che l'errore è stato contrassegnato l'icona mostra / nascondi diventa invisibile
guisantogui

2

mostra e nascondi password Edit_Text con la casella di controllo

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>

codice 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

Hai provato con setTransformationMethod? È ereditato da TextView e desidera un TransformationMethod come parametro.

Puoi trovare ulteriori informazioni su TransformationMethods qui .

Ha anche alcune funzioni interessanti, come la sostituzione del personaggio.


2
Il link nella risposta è morto - "Codice stato: 404 non trovato" .
Tra il

developer.android.com/reference/android/text/method/… potrebbe essere un URL migliore per informazioni sui metodi di trasformazione di Android.
Mr. Drew

1

Quello che ho fatto è stato

  1. Crea una vista di testo modificata e una normale vista di testo
  2. Falli sovrapporre tra loro utilizzando il layout dei vincoli (proprio come la schermata di accesso dell'app di Facebook)
  3. Allega un onClickListener alla normale visualizzazione del testo in modo che cambi di conseguenza il tipo di input della modifica della visualizzazione del testo (Visibile / Non visibile)

Puoi guardare questo video per una procedura più dettagliata e spiegazioni https://youtu.be/md3eVaRzdIM

Spero che sia d'aiuto :)


1

Ecco la mia soluzione senza usare TextInputEditText e il metodo Transformation.

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>

Codice 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

Secondo questa fonte , se hai migrato il tuo progetto su AndroidX, puoi sostituirlo

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

con

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

Quindi tutto ciò che devi fare è inserire il codice qui sotto nel tuo file di layout:

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

Ulteriori informazioni sul materiale TextInputLayoutsono disponibili qui .

A questa fonte , si consiglia di migrare ad AndroidX dalla libreria di supporto Android:

AndroidX è il progetto open source che il team di Android utilizza per sviluppare, testare, pacchetto, versione e rilascio di librerie all'interno di Jetpack.

AndroidX rappresenta un notevole miglioramento rispetto alla libreria di supporto Android originale. Come la libreria di supporto, AndroidX viene fornito separatamente dal sistema operativo Android e offre compatibilità con le versioni precedenti di Android. AndroidX sostituisce completamente la libreria di supporto fornendo parità di funzionalità e nuove librerie. Inoltre AndroidX include le seguenti funzionalità:

Tutti i pacchetti in AndroidX vivono in uno spazio dei nomi coerente a partire dalla stringa androidx. I pacchetti della libreria di supporto sono stati mappati nei corrispondenti pacchetti androidx. *. Per una mappatura completa di tutte le vecchie classi e per creare manufatti con quelli nuovi, vedere la pagina Rifattorizzazione pacchetti.

A differenza della Libreria di supporto, i pacchetti AndroidX sono gestiti e aggiornati separatamente. I pacchetti androidx usano una versione semantica rigorosa a partire dalla versione 1.0.0. Puoi aggiornare le librerie AndroidX nel tuo progetto in modo indipendente.

Tutto lo sviluppo di nuove librerie di supporto avverrà nella libreria AndroidX. Ciò include la manutenzione degli artefatti della libreria di supporto originale e l'introduzione di nuovi componenti Jetpack.


1

Inizialmente questo è lo schermo caricato con una visibilità dell'asset vettoriale dell'immagine inserisci qui la descrizione dell'immagine

al clic cambierà in questa visibilità dell'immagine off inserisci qui la descrizione dell'immagine

codice per switch password sopra (codice 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>

Codice Java per il funzionamento dei pulsanti

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

In XML fare così

    <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

La mia estensione Kotlin. scrivere una volta usare ovunque

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

Puoi mantenere questo metodo in qualsiasi file e usarlo ovunque usalo in questo modo

ivShowPassword.click { etPassword.tooglePassWord() }

dove si fa clic su ivShowPassword imageview (occhio) ed etPassword è Editext


0

Una buona soluzione Imposta un pulsante, quindi utilizza questo codice:

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

Aggiungi questo metodo:

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

Chiama passerà dallo stato del tipo di input (puoi cambiare la trasformazione a linea singola in quella preferita). Esempio di utilizzo:

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());
            }
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.