So wechseln Sie zwischen Ausblenden und Anzeigen des Passworts

176

Gibt es eine clevere Möglichkeit, den Benutzer in einem Android EditText zwischen dem Verstecken und Anzeigen von Passwörtern wechseln zu lassen? Mit einer Reihe von PC-basierten Apps kann der Benutzer dies tun.

Jacknad
quelle

Antworten:

155

Sie können die Attribute einer Textansicht dynamisch ändern. Wenn Sie das XML-Attribut android:passwordauf true setzen würden, würde die Ansicht Punkte anzeigen , wenn Sie es auf false setzen, wird der Text angezeigt.

Mit der Methode setTransformationMethod sollten Sie diese Attribute aus dem Code ändern können. (Haftungsausschluss: Ich habe nicht getestet, ob die Methode nach dem Anzeigen der Ansicht noch funktioniert. Wenn Sie Probleme damit haben, hinterlassen Sie mir einen Kommentar, den ich wissen muss.)

Der vollständige Beispielcode wäre

yourTextView.setTransformationMethod(new PasswordTransformationMethod());

um das Passwort zu verbergen. Um das Kennwort anzuzeigen, können Sie eine der vorhandenen Transformationsmethoden festlegen oder eine leere Transformationsmethode implementieren , die nichts mit dem Eingabetext tut.

yourTextView.setTransformationMethod(new DoNothingTransformation());
Janusz
quelle
61
Um das Passwort anzuzeigen, müssen Sie keine neuen Klassen erstellen. Rufen Sie einfach an setTransformationMethod(null).
Matt Quigley
4
@ Janusz, die Verwendung der folgenden wird Gud-Lösung geben. setTransformationMethod (PasswordTransformationMethod.getInstance ()); und setTransformationMethod (HideReturnsTransformationMethod.getInstance ());
Sujiths
@ Janusz aber wie bekomme ich Ein- / Ausblenden von Tasten in der Tastatur?
Narendra Singh
Beim Aufruf von setTransformationMethod auf einem EditeText wird der onTextChanged-Rückruf des EditText aufgerufen ... ist es möglich, dass dies nicht passiert ist?
Tsiro
1
Richtig. Die "setTransformationMethod () ist der Schlüssel. Alles, was Sie brauchen, ist ein Wechsel in Ihrem Listener: etPassword.setTransformationMethod (null) / etPassword.setTransformationMethod (neue PasswordTransformationMethod ()). Standardmäßig in Ihrem XML-EditView" android: inputType = "textPassword ""
Sergio
303

Es ist wirklich einfach zu erreichen, da die Support Library v24.2.0.

Was Sie tun müssen, ist nur:

  1. Fügen Sie die Designbibliothek Ihren Abhängigkeiten hinzu

    dependencies {
         compile "com.android.support:design:24.2.0"
    }
  2. Verwendung TextInputEditTextin Verbindung mitTextInputLayout

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

Das passwordToggleEnabledAttribut erledigt den Job!

  1. Vergessen Sie nicht, in Ihrem Root-Layout hinzuzufügen xmlns:app="http://schemas.android.com/apk/res-auto"

  2. Sie können Ihr Passwort umschalten, indem Sie Folgendes verwenden:

app:passwordToggleDrawable- Zeichnbar, um als Symbol für die Sichtbarkeit der Passworteingabe verwendet zu werden.
app:passwordToggleTint- Symbol zum Umschalten der Sichtbarkeit der Passworteingabe.
app:passwordToggleTintMode- Mischmodus zum Anwenden der Hintergrundfarbe.

Weitere Details finden Sie in der TextInputLayout-Dokumentation .

Geben Sie hier die Bildbeschreibung ein

Für AndroidX

  • Ersetzen android.support.design.widget.TextInputLayoutdurchcom.google.android.material.textfield.TextInputLayout

  • Ersetzen android.support.design.widget.TextInputEditTextdurchcom.google.android.material.textfield.TextInputEditText

mmBs
quelle
In Version 25.1.0 habe ich ein seltsames Verhalten: Es zeigt das Umschalten des Passworts einmal an, aber wenn Sie es drücken, verschwindet es o_O '
MiguelHincapieC
1
Ja, es gibt auch einige Macken mit android:textAttribut auf TextInputEditText. Sie können jederzeit ein Problem auf Google Issues Tracker für Android
mmBs
1
@ Delta7 Es gibt einige Möglichkeiten und Problemumgehungen. Bitte stellen Sie die Frage zu SO, fügen Sie hier einen Link ein und ich werde versuchen, Ihnen zu helfen.
mmBs
1
Vielen Dank. In meinem Build sind die Ein- / Ausblendgrafiken jedoch seltsamerweise von Ihrem Screenshot umgekehrt - es zeigt das durchgestrichene Auge, wenn das Passwort ausgeblendet ist - ich denke, jemand hat entschieden, dass Schaltflächen den aktuellen Status anstelle der Aktion (oder des Zielstatus) anzeigen sollen.
Josh Sutterfield
1
@ JoshSutterfield zustimmen. Wenn wir also eine Aktionsschaltfläche möchten, müssen wir sie manuell mit app:passwordToggleDrawable(veraltet) umkehren oder app:endIconDrawabledann eine benutzerdefinierte Zeichenfunktion verwenden, wie <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> ich denke, dass Google dieses Verhalten beheben sollte. Gute Diskussion
Rahmat Ihsan
112

Um die Punkte anstelle des Passworts anzuzeigen, legen Sie die PasswordTransformationMethod fest:

yourEditText.setTransformationMethod(new PasswordTransformationMethod());

Natürlich können Sie dies standardmäßig in Ihrem edittext-Element im XML-Layout mit festlegen

android:password

Um das lesbare Passwort erneut anzuzeigen, übergeben Sie einfach null als Transformationsmethode:

yourEditText.setTransformationMethod(null);
Qlimax
quelle
7
android:passwordist jetzt veraltet, und Sie sollten android:inputTypestattdessen verwenden.
Wilka
54
Sie können Ihre Benutzer auch glücklich machen, indem Sie die Cursorposition speichern, bevor Sie die Transformationsmethode festlegen und danach wiederherstellen. Verwenden Sie editText.getSelectionStart()und editText.getSelectionEnd()zum Speichern und editText.setSelection(start, end)Wiederherstellen der Cursorposition .
Mostafa
2
@Wilka: android: inputType lässt Sie zur Laufzeit NICHT zwischen den beiden Zuständen hin und her wechseln. Sie können nur einmal wechseln und wenn Sie es einmal geändert haben, können Sie es nicht mehr zurück ändern. Und nein, die setTransformationMethod ist NICHT veraltet.
AndroidDev
@Qlimax aber wie bekomme ich Ein / Aus-Tasten in der Tastatur?
Narendra Singh
@DroidWormNarendra Normalerweise hängen Sie einen Ereignis-Listener an ein "Augenbild" zwischen Ihrer Passworteingabe oder innerhalb Ihrer Passworteingabe an, wie hier erläutert: stackoverflow.com/questions/3554377/… . In diesem Fall können Sie dann das Passwort ein- / ausblenden. AFAIK ist nicht möglich, einige Ein / Aus-Tasten in der Tastatur zu haben
Qlimax
82

Zeigen:

editText.setInputType(InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD);

Verstecken:

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

Nach jedem dieser Schritte wird der Cursor zurückgesetzt, also:

editText.setSelection(editText.length());
Matt Logan
quelle
Getestet auf Android 4.3 & 5.0, funktioniert super! Dokumente lassen es so aussehen, als ob dies bis hinunter zu API 3 bis funktionieren sollte.
James
@MattLogan, aber wie bekomme ich Ein- / Ausblenden von Tasten in der Tastatur?
Narendra Singh
5
Dies ist hier die direkteste Antwort. Vielen Dank. (seltsam, es ist nicht die akzeptierte)
Tina
Dies scheint nicht zu funktionieren, wenn es zur Laufzeit geändert wird. Es wird auch nicht die letzte Cursorposition / -auswahl des Benutzers wiederhergestellt, wenn nicht am Ende der Zeile.
Tom
31

Sie können verwenden app:passwordToggleEnabled="true"

Hier ist ein Beispiel unten angegeben

<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">
Tabish Khan
quelle
Heute muss es eine bevorzugte Antwort sein
Ruslan Berozov
Das erhöht in meinem Fall die Höhe der Ansicht. Gibt es eine Möglichkeit, die Polsterung vom umschaltbaren Schalter zu entfernen?
Sadda Hussain
Dies ist in Materialkomponenten veraltet. Verwenden Sie app:endIconMode="password_toggle".
Nicolas
13

Verwenden Sie das Kontrollkästchen und ändern Sie den Eingabetyp entsprechend.

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);
    }
}
Praveena
quelle
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;
}
Vladyslav Ulianytskyi
quelle
Sie müssen den Text nicht erneut festlegen. Rufen Sie nur firstEditText.invalidate () auf.
Gunavant Patel
7

Es ist Arbeit für mich. Dies wird Ihnen definitiv helfen

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

            }
        });
sujith s
quelle
5

Ich habe das Gefühl, ich möchte diese Frage auch dort beantworten, einige gute Antworten,

laut Dokumentation TransformationMethod erfüllen unsere Mission

Transformationsmethode

TextView verwendet TransformationMethods, um beispielsweise die Zeichen von Kennwörtern durch Punkte zu ersetzen oder zu verhindern, dass die Zeilenumbrüche in einzeiligen Textfeldern Zeilenumbrüche verursachen.

Beachten Sie, dass ich ein Buttermesser verwende, aber es ist dasselbe, wenn der Benutzer das Kennwort anzeigen aktiviert

@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());
    }
Mina Fawzy
quelle
5

Ich kann den ShowPassword / HidePassword-Code mit nur wenigen Zeilen hinzufügen, die in einem Block enthalten sind:

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"
            }
        }
    } );
    ...
David M Lee
quelle
5

Ich hatte das gleiche Problem und es ist sehr einfach zu implementieren.

Alles, was Sie tun müssen, ist, Ihr EditText-Feld in ein (com.google.android.material.textfield.TextInputLayout) und in dieses Add (app: passwordToggleEnabled = "true") zu verpacken.

Dies zeigt das Auge im EditText-Feld und wenn Sie darauf klicken, wird das Passwort angezeigt und verschwindet, wenn Sie erneut darauf klicken.

<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>
Mourne
quelle
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());

        }
    });
}
Shailesh Bhardwaj
quelle
4

In sehr einfacher Form:

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

Ich hoffe es hilft.

Hiren Patel
quelle
3

Sie können das Passwort mit dem folgenden Code ein- / ausblenden:

XML-CODE:

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

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());
        }
    }
});
Nikunjkumar Kapupara
quelle
3

Versuche dies:

Definieren Sie zunächst ein Flag wie folgt als global:

private boolean isShowPassword = false;

Und stellen Sie den Listener so ein, dass er auf die Schaltfläche zum Anzeigen und Ausblenden des Passworts tippt:

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;
                }
            }
        });
reza_khalafi
quelle
2

Probieren Sie das https://github.com/maksim88/PasswordEditText-Projekt bei github aus. Sie müssen Ihren Java-Code nicht einmal damit ändern. Nur ändern

Text bearbeiten

Tag zu

com.maksim88.passwordedittext.PasswordEditText

in Ihrer XML-Datei.

Anatoliy Shuba
quelle
Haben Sie eine Idee, wie man setError mit dieser Komponente verwendet, sobald der Fehler markiert ist, wird das
Ein-
2

Passwort ein- und ausblenden Edit_Text mit Kontrollkästchen

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

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
Amin
quelle
2

Haben Sie es mit setTransformationMethod versucht? Es wurde von TextView geerbt und möchte eine Transformationsmethode als Parameter.

Weitere Informationen zu TransformationMethods finden Sie hier .

Es hat auch einige coole Funktionen, wie das Ersetzen von Zeichen.

Hamcha
quelle
2
Der Link in der Antwort ist tot - "Statuscode: 404 nicht gefunden" .
Pang
developer.android.com/reference/android/text/method/… ist möglicherweise eine bessere URL für Informationen zu den Transformationsmethoden von Android.
Mr.Drew
1

Was ich getan habe war zu

  1. Erstellen Sie eine Bearbeitungstextansicht und eine normale Textansicht
  2. Stellen Sie sicher, dass sie sich mithilfe des Einschränkungslayouts überlappen (genau wie der Anmeldebildschirm der Facebook-App).
  3. Hängen Sie einen onClickListener an die normale Textansicht an, damit der Eingabetyp der Bearbeitungstextansicht entsprechend geändert wird (sichtbar / nicht sichtbar).

In diesem Video finden Sie detailliertere Schritte und Erklärungen unter https://youtu.be/md3eVaRzdIM

Ich hoffe es hilft :)

Jack Tiong
quelle
1

Hier ist meine Lösung ohne Verwendung der TextInputEditText- und Transformationsmethode.

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 Code

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;
        }
    });
Sagar Chapagain
quelle
1

Laut dieser Quelle können Sie Ihr Projekt ersetzen, wenn Sie es auf AndroidX migriert haben

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

mit

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

Dann müssen Sie nur noch den folgenden Code in Ihre Layoutdatei einfügen:

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

Weitere Informationen zum Material TextInputLayoutfinden Sie hier .

Für diese Quelle wird empfohlen, von der Android Support Library auf AndroidX zu migrieren:

AndroidX ist das Open-Source-Projekt, mit dem das Android-Team Bibliotheken in Jetpack entwickelt, testet, verpackt, versioniert und veröffentlicht.

AndroidX ist eine wesentliche Verbesserung gegenüber der ursprünglichen Android Support Library. Wie die Support-Bibliothek wird AndroidX separat vom Android-Betriebssystem ausgeliefert und bietet Abwärtskompatibilität für alle Android-Versionen. AndroidX ersetzt die Support-Bibliothek vollständig, indem Feature-Parität und neue Bibliotheken bereitgestellt werden. Zusätzlich enthält AndroidX die folgenden Funktionen:

Alle Pakete in AndroidX leben in einem konsistenten Namespace, beginnend mit der Zeichenfolge androidx. Die Support Library-Pakete wurden in entsprechende androidx. * -Pakete abgebildet. Eine vollständige Zuordnung aller alten Klassen und Build-Artefakte zu den neuen finden Sie auf der Seite Paket-Refactoring.

Im Gegensatz zur Support-Bibliothek werden AndroidX-Pakete separat verwaltet und aktualisiert. Die AndroidX-Pakete verwenden eine strikte semantische Versionierung ab Version 1.0.0. Sie können AndroidX-Bibliotheken in Ihrem Projekt unabhängig aktualisieren.

Die gesamte Entwicklung der neuen Support-Bibliothek erfolgt in der AndroidX-Bibliothek. Dies umfasst die Wartung der ursprünglichen Artefakte der Support Library und die Einführung neuer Jetpack-Komponenten.

Amiraslan
quelle
1

Dies ist zunächst der Bildschirm, auf dem die Sichtbarkeit eines Bildvektor-Assets geladen ist Geben Sie hier die Bildbeschreibung ein

Beim Klicken wird die Bildsichtbarkeit deaktiviert Geben Sie hier die Bildbeschreibung ein

Code für den obigen Passwortschalter (XML-Code)

<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-Code für die Tastenbedienung

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

In XML gefällt das

    <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;
            }
Syed Danish Haider
quelle
0

Meine Kotlin-Erweiterung. einmal schreiben überall verwenden

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

Sie können diese Methode in jeder Datei behalten und überall verwenden. Verwenden Sie sie so

ivShowPassword.click { etPassword.tooglePassWord() }

Dabei wird auf ivShowPassword geklickt. Bildansicht (Auge) und etPassword auf Editext

Aklesh Singh
quelle
0

Eine gute Lösung. Richten Sie eine Schaltfläche ein und verwenden Sie diesen Code:

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


}
Matthewoak
quelle
0

Fügen Sie diese Methode hinzu:

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

Wenn Sie es aufrufen, wird zwischen dem Status des Eingabetyps umgeschaltet (Sie können die einzeilige Umwandlung in Ihren Favoriten ändern). Anwendungsbeispiel:

editText.revertTransformation()
Benny
quelle
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);
            }
        }
    });
MEGHA DOBARIYA
quelle
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);
            }
        }
    });
MEGHA DOBARIYA
quelle
-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());
            }
Ankit Tomer
quelle