Gizleme ve görüntüleme şifresi arasında geçiş yapma


176

Kullanıcının bir android EditText şifresini gizlemek ve görüntülemek arasında geçiş yapmanın akıllıca bir yolu var mı? Bazı PC tabanlı uygulamalar kullanıcının bunu yapmasına izin verir.

Yanıtlar:


155

TextView özniteliklerini dinamik olarak değiştirebilirsiniz. XML Atrribute android:passworddeğerini true olarak ayarlarsanız, görünüm false olarak ayarlanırsa görünüm noktaları gösterilir.

SetTransformationMethod yöntemiyle bu öznitelikleri koddan değiştirebilmeniz gerekir. (Feragatname: Görünüm görüntülendikten sonra yöntemin hala çalışıp çalışmadığını test etmedim. Bununla ilgili sorunlarla karşılaşırsanız, bilmem için bana bir yorum bırakın.)

Örnek kodun tamamı

yourTextView.setTransformationMethod(new PasswordTransformationMethod());

şifreyi gizlemek için. Parolayı göstermek için mevcut dönüştürme yöntemlerinden birini ayarlayabilir veya giriş metniyle hiçbir şey yapmayan boş bir TransformationMethod uygulayabilirsiniz .

yourTextView.setTransformationMethod(new DoNothingTransformation());

61
Parolayı göstermek için yeni sınıf oluşturmanıza gerek yoktur. Sadece ara setTransformationMethod(null).
Matt Quigley

4
@ Janusz, aşağıdakilerin kullanımı gud çözümü verecektir. setTransformationMethod (PasswordTransformationMethod.getInstance ()); ve setTransformationMethod (HideReturnsTransformationMethod.getInstance ());
sujith s

@Janusz ama tuşları klavyede göster / gizle?
Narendra Singh

bir EditeText'te setTransformationMethod çağrıldığında EditText'in onTextChanged geri çağrısı çağrılıyor ... bu mümkün değil mi?
tsiro

1
Doğru. "SetTransformationMethod () anahtarıdır. Tek ihtiyacınız olan dinleyicinizde geçiş yapmaktır: etPassword.setTransformationMethod (null) / etPassword.setTransformationMethod (yeni PasswordTransformationMethod ()). Varsayılan olarak xml EditView" android: inputType = "textPassword içinde ayarlayın ""
Sergio

303

Destek Kitaplığı v24.2.0'dan beri başarmak gerçekten çok kolay.

Yapmanız gereken sadece:

  1. Tasarım kitaplığını bağımlılıklarınıza ekleyin

    dependencies {
         compile "com.android.support:design:24.2.0"
    }
    
  2. TextInputEditTextİle birlikte kullanınTextInputLayout

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

passwordToggleEnabledNitelik işi yapacak!

  1. Kök düzeninizde eklemeyi unutmayın xmlns:app="http://schemas.android.com/apk/res-auto"

  2. Aşağıdakileri kullanarak şifre geçişinizi özelleştirebilirsiniz:

app:passwordToggleDrawable- Şifre girişi görünürlük değiştirme simgesi olarak kullanmak için çizilebilir.
app:passwordToggleTint- Şifre giriş görünürlüğü geçişi için kullanılacak simge.
app:passwordToggleTintMode- Arka plan tonunu uygulamak için kullanılan karıştırma modu.

Daha fazla detay TextInputLayout belgelerinde .

resim açıklamasını buraya girin

AndroidX için

  • Değiştir android.support.design.widget.TextInputLayoutilecom.google.android.material.textfield.TextInputLayout

  • Değiştir android.support.design.widget.TextInputEditTextilecom.google.android.material.textfield.TextInputEditText


Sürüm 25.1.0 Ben garip bir davranış var: bir kez şifre geçişi gösterir ama eğer basarsanız, o_O 'kaybolur
MiguelHincapieC

1
Evet, android:textüzerinde bazı tuhaflıklar da var TextInputEditText. Android için Google Sorunlar İzleyicisi'nde
mmBs

1
@ Delta7 Bazı yollar ve geçici çözümler var. Lütfen, SO ile ilgili soruyu sorun, buraya bir bağlantı yapıştırın ve size yardımcı olmaya çalışacağım.
mmBs

1
Teşekkürler. Ancak, derlememde göster / gizle grafikleri ekran görüntünüzden garip bir şekilde ters çevrilmiş - şifre gizlendiğinde çarpı işareti gözüküyor - sanırım birisi düğmelerin eylem (veya hedef durumu) yerine geçerli durumu göstermesi gerektiğine karar verdi.
Josh Sutterfield

1
@JoshSutterfield aynı fikirde. Bu yüzden eylem düğmesini istiyorsak, google'ı bu davranışı düzeltmesi gerektiğini düşündüğüm gibi manuel olarak app:passwordToggleDrawable(kullanımdan kaldırılmış) kullanarak geri çevirmek veya app:endIconDrawableözel çekilebilir kullanmak zorundayız <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>. İyi tartışma
Rahmat Ihsan

112

Parola yerine noktaları göstermek için PasswordTransformationMethod değerini ayarlayın:

yourEditText.setTransformationMethod(new PasswordTransformationMethod());

tabii ki bunu varsayılan olarak xml düzenindeki edittext öğenizde

android:password

Okunabilir parolayı tekrar göstermek için, dönüştürme yöntemi olarak null değerini iletmeniz yeterlidir:

yourEditText.setTransformationMethod(null);

7
android:passwordartık kullanımdan kaldırıldı ve android:inputTypebunun yerine kullanmalısınız .
Wilka

54
Ayrıca, dönüşüm yöntemini ayarlamadan ve imleci geri yüklemeden önce imleç konumunu kaydederek kullanıcılarınızı mutlu edebilirsiniz. Kullanım editText.getSelectionStart()ve editText.getSelectionEnd()imleç konumunu kaydetmek için ve editText.setSelection(start, end)bunu geri yüklemek için.
Mostafa

2
@Wilka: android: inputType, çalışma anında iki durum arasında geçiş yapmanıza izin vermez. Sadece bir kez değiştirmenize izin verir ve değiştirdiğinizde geri değiştiremezsiniz. Ve hayır, setTransformationMethod kullanılmaz.
AndroidDev

@Qlimax ama tuşları klavyede göster / gizle?
Narendra Singh

@DroidWormNarendra normalde şifre girişiniz arasında veya şifre girişinizin içine aşağıda açıklandığı gibi bir "göz görüntüsü" ne olay dinleyicisi eklersiniz: stackoverflow.com/questions/3554377/… . Daha sonra bu olay dinleyicisinde şifreyi gösterebilir / gizleyebilirsiniz. AFAIK, klavyede bazı göster / gizle tuşlarına sahip olmak mümkün değildir
Qlimax

82

Göstermek için:

editText.setInputType(InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD);

Gizlemek için:

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

Bunların her birinin ardından imleç sıfırlanır, bu nedenle:

editText.setSelection(editText.length());

Android 4.3 ve 5.0'da test edildi, harika çalışıyor! Dokümanlar, bunun API 3'e kadar çalışması gerektiği gibi görünüyor.
James

@MattLogan ama tuşları klavyede göster / gizle?
Narendra Singh

5
Buradaki en basit cevap budur. Teşekkürler. (garip kabul edilmez)
Tina

Çalışma zamanında değiştirildiğinde bu işe yaramaz gibi görünüyor. Ayrıca, satırın sonunda değilse kullanıcının son imleç konumunu / seçimini geri yüklemez.
Tom

31

Kullanabilirsiniz app:passwordToggleEnabled="true"

aşağıda örnek verilmiştir

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

Bugün cevap kullanmak tercih edilmelidir
Ruslan Berozov

Bu benim durumumda görüşün yüksekliğini arttırıyor. Dolguyu çekilebilir geçişten çıkarmanın herhangi bir yolu var mı?
Sadda Hussain

Bu, malzeme bileşenlerinde kullanımdan kaldırılmıştır. Kullanın app:endIconMode="password_toggle".
Nicolas

13

Onay kutusunu kullanın ve giriş türünü uygun şekilde değiştirin.

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

Metni tekrar ayarlamanıza gerek yoktur, sadece firstEditText.invalidate () öğesini çağırın;
Gunavant Patel

7

Bu benim için iş.Bu kesinlikle sana yardımcı olacak

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

Bazı iyi cevaplar olsa bile bu soruyu cevaplamak istediğimi hissediyorum,

belgelerine göre DönüşümMethod görevimizi yapmak

TransformationMethod

TextView, parola karakterlerini noktalarla değiştirmek veya yeni satır karakterlerinin tek satırlı metin alanlarında satır sonlarına neden olmasını önlemek gibi şeyleri yapmak için TransformationMethods kullanır.

Uyarı tereyağı bıçağı kullanıyorum, ancak kullanıcı kontrol şifresini gösterirse aynı

@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 kodunu, bir blokta bulunan birkaç satırla ekleyebiliyorum:

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

Aynı sorunu yaşadım ve uygulanması çok kolay.

Tek yapmanız gereken EditText alanınızı bir (com.google.android.material.textfield.TextInputLayout) ve bu eklentiye (app: passwordToggleEnabled = "true") sarmaktır.

Bu, EditText alanında göz gösterecektir ve üzerine tıkladığınızda şifre tekrar tıklandığında görünecek ve kaybolacaktır.

<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

Çok basit bir biçimde:

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

Umarım yardımcı olur.


3

Aşağıdaki kodu kullanarak şifreyi GÖSTER / GİZLE yapabilirsiniz:

XML KODU:

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

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

Bunu dene:

İlk olarak bir bayrağı şöyle global olarak tanımlayın:

private boolean isShowPassword = false;

Dinleyiciyi şovdaki dokun ve şifre gizle düğmesini kullanacak şekilde ayarlayın:

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

Github'daki https://github.com/maksim88/PasswordEditText projesini deneyin . Java kodunuzu kullanarak bile değiştirmeniz gerekmez. Sadece değiştir

Metni düzenle

etiketlemek

com.maksim88.passwordedittext.PasswordEditText

XML dosyanızda.


SetError'ı bu bileşenle nasıl kullanacağınız hakkında bir fikriniz var mı, hata işaretlendikten sonra göster / gizle simgesi görünmez hale geliyor
guisantogui

2

parolayı göster ve gizle

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 kodu

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 ile denediniz mi? TextView'den devralınır ve parametre olarak bir TransformationMethod ister.

TransformationMethods hakkında daha fazla bilgiyi burada bulabilirsiniz .

Ayrıca, karakter değiştirme gibi bazı harika özelliklere de sahiptir.


2
Yanıtta bağlantı kesildi - "Durum Kodu: 404 Bulunamadı" .
Pang

developer.android.com/reference/android/text/method/… , Android'in Dönüşüm Yöntemleri hakkında bilgi için daha iyi bir URL olabilir.
Mr.Drew

1

Yaptığım şey

  1. Düzenleme metin görünümü ve normal metin görünümü oluşturma
  2. Kısıtlama düzenini kullanarak birbirleriyle çakışmasını sağlayın (tıpkı Facebook uygulaması giriş ekranı gibi)
  3. Düzenleme metin görünümünün giriş türünü buna göre değiştirmesi için normal metin görünümüne bir onClickListener ekleyin (Görünür / Görünmez)

Daha ayrıntılı adımlar ve açıklamalar için bu videoya göz atabilirsiniz https://youtu.be/md3eVaRzdIM

Umarım yardımcı olur :)


1

İşte benim çözüm TextInputEditText ve Transformation yöntemi kullanmadan.

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 Kodu

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

Bu kaynağa göre , projenizi AndroidX'e taşıdıysanız,

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

ile

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

Sonra yapmanız gereken tek şey aşağıdaki kodu yerleşim dosyanıza koymaktır:

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

Materyal hakkında daha fazla bilgi TextInputLayoutbulunabilir burada .

Bu kaynağa , Android Destek Kitaplığı'ndan AndroidX'e geçmeniz önerilir:

AndroidX, Android ekibinin Jetpack içindeki kütüphaneleri geliştirmek, test etmek, paketlemek, versiyonlamak ve yayınlamak için kullandığı açık kaynaklı bir projedir.

AndroidX, orijinal Android Destek Kütüphanesi için önemli bir gelişmedir. Destek Kitaplığı gibi AndroidX de Android işletim sisteminden ayrı olarak gönderilir ve Android sürümlerinde geriye dönük uyumluluk sağlar. AndroidX, özellik paritesi ve yeni kütüphaneler sağlayarak Destek Kitaplığı'nın yerini tamamen alıyor. Ayrıca AndroidX aşağıdaki özellikleri içerir:

AndroidX'teki tüm paketler androidx dizesinden başlayarak tutarlı bir ad alanında yaşar. Destek Kitaplığı paketleri karşılık gelen androidx. * Paketleriyle eşleştirilmiştir. Tüm eski sınıfların tam olarak eşlenmesi ve yeni sınıflarla ilgili yapay nesneler oluşturulması için Paket Yeniden Düzenleme sayfasına bakın.

Destek Kitaplığından farklı olarak, AndroidX paketleri ayrı olarak korunur ve güncellenir. Androidx paketleri 1.0.0 sürümünden başlayarak katı Semantik Versiyonlama kullanır. Projenizdeki AndroidX kitaplıklarını bağımsız olarak güncelleyebilirsiniz.

Tüm yeni Destek Kütüphanesi geliştirme AndroidX kütüphanesinde gerçekleşecektir. Bu, orijinal Destek Kütüphanesi eserlerinin bakımını ve yeni Jetpack bileşenlerinin tanıtımını içerir.


1

İlk başta bir görüntü vektör varlık görünürlüğü yüklü ekran resim açıklamasını buraya girin

tıklandığında bu resim görünürlüğü kapalı olarak değişir resim açıklamasını buraya girin

yukarıdaki şifre anahtarı için kod (xml kodu)

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

Düğme çalışması için Java kodu

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'de bunu beğenin

    <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 uzantım. bir kez yaz her yerde kullan

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

Bu yöntemi herhangi bir dosyada tutabilir ve her yerde kullanabilirsiniz.

ivShowPassword.click { etPassword.tooglePassWord() }

ivShowPassword resim görüntüleme (göz) ve etPassword, Editext


0

İyi bir çözüm. Bir düğme ayarlayın, ardından şu kodu kullanın:

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

Bu yöntemi ekleyin:

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

Arayın, giriş tipi durumu arasında geçiş yapacaktır (Tek Satır dönüşümünü sık kullanılanınıza değiştirebilirsiniz). Kullanım örneği:

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());
            }
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.