Bagaimana cara beralih antara sembunyikan dan melihat kata sandi

176

Apakah ada cara pintar untuk membiarkan pengguna beralih antara sembunyikan dan melihat kata sandi di EditText android? Sejumlah aplikasi berbasis PC memungkinkan pengguna melakukan ini.

jacknad
sumber

Jawaban:

156

Anda dapat secara dinamis mengubah atribut dari TextView. Jika Anda ingin mengatur Atrribute XML android:passwordmenjadi true, tampilan akan menunjukkan titik jika Anda mengaturnya ke false teks ditampilkan.

Dengan metode setTransformationMethod, Anda harus dapat mengubah atribut ini dari kode. (Penafian: Saya belum menguji apakah metode ini masih berfungsi setelah tampilan ditampilkan. Jika Anda mengalami masalah dengan itu beri saya komentar untuk saya ketahui.)

Kode sampel lengkap akan menjadi

yourTextView.setTransformationMethod(new PasswordTransformationMethod());

untuk menyembunyikan kata sandi. Untuk memperlihatkan kata sandi, Anda dapat mengatur salah satu metode transformasi yang ada atau mengimplementasikan TransformationMethod kosong yang tidak melakukan apa pun dengan teks input.

yourTextView.setTransformationMethod(new DoNothingTransformation());
Janusz
sumber
61
Untuk menunjukkan kata sandi, Anda tidak perlu membuat kelas baru. Panggil saja setTransformationMethod(null).
Matt Quigley
4
@ Janusz, penggunaan yang berikut ini akan memberikan solusi gud. setTransformationMethod (PasswordTransformationMethod.getInstance ()); dan setTransformationMethod (HideReturnsTransformationMethod.getInstance ());
sujith s
@ Janusz tetapi bagaimana cara mendapatkan tombol show / hide di keyboard?
Narendra Singh
saat memanggil setTransformationMethod pada sebuah EditeText, panggilan balik onTextChanged dari EditText dipanggil ... apakah mungkin ini tidak terjadi?
tsiro
1
Benar. "SetTransformationMethod () adalah kuncinya. Yang Anda butuhkan adalah beralih di pendengar Anda: etPassword.setTransformationMethod (null) / etPassword.setTransformationMethod (new PasswordTransformationMethod ()). Secara default, atur di xml Anda EditView" android: inputType = "textPassword ""
Sergio
303

Ini sangat mudah untuk dicapai sejak Perpustakaan Dukungan v24.2.0.

Yang perlu Anda lakukan hanyalah:

  1. Tambahkan pustaka desain ke dependecies Anda

    dependencies {
         compile "com.android.support:design:24.2.0"
    }
  2. Gunakan TextInputEditTextbersama denganTextInputLayout

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

The passwordToggleEnabledatribut akan melakukan pekerjaan!

  1. Di tata letak root Anda jangan lupa untuk menambahkan xmlns:app="http://schemas.android.com/apk/res-auto"

  2. Anda dapat menyesuaikan sakelar kata sandi dengan menggunakan:

app:passwordToggleDrawable- Dapat ditarik untuk digunakan sebagai ikon sakelar visibilitas input kata sandi.
app:passwordToggleTint- Ikon untuk digunakan untuk beralih visibilitas input kata sandi.
app:passwordToggleTintMode- Mode Blending digunakan untuk menerapkan warna latar belakang.

Lebih detail dalam dokumentasi TextInputLayout .

masukkan deskripsi gambar di sini

Untuk AndroidX

  • Ganti android.support.design.widget.TextInputLayoutdengancom.google.android.material.textfield.TextInputLayout

  • Ganti android.support.design.widget.TextInputEditTextdengancom.google.android.material.textfield.TextInputEditText

mmBs
sumber
Dalam versi 25.1.0 saya memiliki perilaku aneh: itu menunjukkan kata sandi beralih sekali tetapi jika Anda menekannya, itu akan hilang o_O '
MiguelHincapieC
1
Ya, ada juga beberapa kebiasaan dengan android:textatribut TextInputEditText. Anda selalu dapat mengangkat masalah di Google Issues Tracker untuk Android
mmBs
1
@ Delta7 Ada beberapa cara dan solusi. Tolong, ajukan pertanyaan pada SO, tempel tautan di sini dan saya akan mencoba membantu Anda.
mmBs
1
Terima kasih. Namun, dalam build saya, grafik show / hide anehnya terbalik dari tangkapan layar Anda - ini menunjukkan tanda silang ketika kata sandi disembunyikan - saya kira seseorang memutuskan tombol harus menampilkan keadaan saat ini alih-alih tindakan (atau keadaan tujuan).
Josh Sutterfield
1
@JoshSutterfield setuju. jadi jika kita ingin tombol aksi, kita harus membalikkannya secara manual menggunakan app:passwordToggleDrawable(usang) atau app:endIconDrawablekemudian menggunakan drawable kustom seperti <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> saya pikir google harus memperbaiki perilaku ini. Diskusi yang bagus
Rahmat Ihsan
112

Untuk menunjukkan titik-titik alih-alih kata sandi, atur PasswordTransformationMethod:

yourEditText.setTransformationMethod(new PasswordTransformationMethod());

tentu saja Anda dapat mengatur ini secara default di elemen edittext Anda di tata letak xml dengan

android:password

Untuk menampilkan kembali kata sandi yang dapat dibaca, masukkan nol sebagai metode transformasi:

yourEditText.setTransformationMethod(null);
Qlimax
sumber
7
android:passwordsudah ditinggalkan sekarang, dan Anda harus menggunakan android:inputTypesebagai gantinya.
Wilka
54
Anda juga dapat membuat pengguna Anda senang dengan menyimpan posisi kursor sebelum mengatur metode transformasi dan mengembalikannya. Gunakan editText.getSelectionStart()dan editText.getSelectionEnd()untuk menyimpan posisi kursor dan editText.setSelection(start, end)untuk mengembalikannya.
Mostafa
2
@Wilka: android: inputType TIDAK membiarkan Anda bolak-balik di antara kedua status saat run-time. Ini hanya memungkinkan Anda untuk beralih sekali dan sekali Anda mengubahnya, Anda tidak dapat mengubahnya kembali. Dan tidak, setTransformationMethod TIDAK ditinggalkan.
AndroidDev
@ Qlimax tetapi bagaimana cara mendapatkan tombol show / hide di keyboard?
Narendra Singh
@DroidWormNarendra Anda biasanya melampirkan pendengar acara ke "gambar mata" antara input kata sandi Anda, atau di dalam input kata sandi Anda seperti dijelaskan di sini: stackoverflow.com/questions/3554377/… . Kemudian di pendengar acara ini Anda dapat menampilkan / menyembunyikan kata sandi. AFAIK tidak mungkin memiliki beberapa tombol tampilkan / sembunyikan di keyboard
Qlimax
82

Memperlihatkan:

editText.setInputType(InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD);

Untuk menyembunyikan:

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

Setelah masing-masing kursor di-reset, jadi:

editText.setSelection(editText.length());
Matt Logan
sumber
Diuji pada Android 4.3 & 5.0, bekerja dengan sangat baik! Documents membuatnya terlihat seperti ini harus bekerja hingga API 3 hingga.
James
@MattLogan tetapi bagaimana cara mendapatkan tombol show / hide di keyboard?
Narendra Singh
5
Ini adalah jawaban yang paling mudah di sini. Terima kasih. (Aneh itu bukan yang diterima)
Tina
Tampaknya ini tidak berfungsi ketika diubah saat runtime. Ini juga tidak akan mengembalikan posisi / pemilihan kursor terakhir pengguna jika tidak di akhir baris.
Tom
31

Kamu bisa memakai app:passwordToggleEnabled="true"

di sini adalah contoh yang diberikan di bawah ini

<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
sumber
Hari ini harus lebih disukai menggunakan jawaban
Ruslan Berozov
Itu meningkatkan ketinggian tampilan dalam kasus saya. Apakah ada cara untuk menghapus padding dari toggle drawable.
Sadda Hussain
Ini sudah tidak digunakan lagi dalam komponen material. Gunakan app:endIconMode="password_toggle".
Nicolas
13

Gunakan kotak centang dan ubah jenis input yang sesuai.

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
sumber
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
sumber
Tidak perlu mengatur teks lagi hanya memanggil firstEditText.invalidate ();
Gunavant Patel
7

Ini bekerja untuk saya. Ini pasti akan membantu Anda

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

Saya merasa saya ingin menjawab pertanyaan ini bahkan ada beberapa jawaban yang bagus,

menurut dokumentasi TransformationMethod melakukan misi kami

Metode Transformasi

TextView menggunakan TransformationMethods untuk melakukan hal-hal seperti mengganti karakter kata sandi dengan titik-titik, atau menjaga karakter baris baru dari menyebabkan jeda baris dalam bidang teks satu baris.

Perhatikan saya menggunakan pisau mentega, tetapi sama jika pengguna memeriksa kata sandi

@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
sumber
5

Saya dapat menambahkan kode ShowPassword / HidePassword hanya dengan beberapa baris, mandiri dalam sebuah blok:

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

Saya memiliki masalah yang sama dan sangat mudah diimplementasikan.

Yang harus Anda lakukan adalah membungkus bidang EditText Anda dalam (com.google.android.material.textfield.TextInputLayout) dan dalam add itu (app: passwordToggleEnabled = "true").

Ini akan menunjukkan mata di bidang EditText dan ketika Anda mengkliknya kata sandi akan muncul dan menghilang ketika diklik lagi.

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

Dalam bentuk yang sangat sederhana:

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

Semoga ini bisa membantu.

Hiren Patel
sumber
3

Anda dapat MENUNJUKKAN / menyembunyikan kata sandi menggunakan kode di bawah ini:

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

KODE JAWA:

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

Coba ini:

Pertama-tama tentukan bendera sebagai global seperti ini:

private boolean isShowPassword = false;

Dan mengatur pendengar untuk menangani ketuk pada acara dan menyembunyikan tombol kata sandi:

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

Coba https://github.com/maksim88/PasswordEditText proyek di github. Anda bahkan tidak perlu mengubah kode Java Anda menggunakannya. Ubah saja

EditText

beri tag ke

com.maksim88.passwordedittext.PasswordEditText

dalam file XML Anda.

Shuba Anatoliy
sumber
Apakah Anda tahu cara menggunakan setError dengan komponen ini, setelah kesalahan ditandai, ikon acara / sembunyikan tidak terlihat
guisantogui
2

tampilkan dan sembunyikan kata sandi Edit_Text dengan kotak centang

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>

kode 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
Amin
sumber
2

Apakah Anda mencoba dengan setTransformationMethod? Itu diwarisi dari TextView dan ingin TransformationMethod sebagai parameter.

Anda dapat menemukan lebih banyak tentang TransformationMethods di sini .

Ini juga memiliki beberapa fitur keren, seperti penggantian karakter.

Hamcha
sumber
2
Tautan dalam jawaban sudah mati - "Kode Status: 404 Tidak Ditemukan" .
Pang
developer.android.com/reference/android/text/method/… mungkin url yang lebih baik untuk informasi tentang Metode Transformasi Android.
Mr.Drew
1

Apa yang saya lakukan adalah

  1. Buat tampilan teks edit dan tampilan teks normal
  2. Buat mereka saling tumpang tindih dengan menggunakan tata letak kendala (seperti layar masuk aplikasi Facebook)
  3. Lampirkan onClickListener ke tampilan teks normal sehingga mengubah jenis input tampilan teks edit sesuai (Terlihat / Tidak terlihat)

Anda dapat melihat video ini untuk langkah-langkah dan penjelasan yang lebih rinci https://youtu.be/md3eVaRzdIM

Semoga bermanfaat :)

Jack Tiong
sumber
1

Ini solusi saya tanpa menggunakan metode TextInputEditText dan 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>

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

Menurut sumber ini , jika Anda telah memigrasi proyek Anda ke AndroidX, maka Anda dapat menggantinya

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

dengan

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

Maka yang harus Anda lakukan adalah meletakkan kode di bawah ini ke file tata letak Anda:

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

Informasi lebih lanjut tentang materi TextInputLayoutdapat ditemukan di sini .

Untuk sumber ini , disarankan untuk bermigrasi ke AndroidX dari Perpustakaan Dukungan Android:

AndroidX adalah proyek sumber terbuka yang digunakan tim Android untuk mengembangkan, menguji, mengemas, versi, dan merilis perpustakaan di dalam Jetpack.

AndroidX adalah peningkatan besar ke Perpustakaan Dukungan Android asli. Seperti Perpustakaan Dukungan, AndroidX dikirimkan secara terpisah dari OS Android dan menyediakan kompatibilitas mundur di seluruh rilis Android. AndroidX sepenuhnya menggantikan Perpustakaan Dukungan dengan menyediakan paritas fitur dan perpustakaan baru. Selain itu AndroidX mencakup fitur-fitur berikut:

Semua paket di AndroidX hidup dalam namespace yang konsisten dimulai dengan string androidx. Paket Perpustakaan Dukungan telah dipetakan ke dalam paket androidx. * Yang sesuai. Untuk pemetaan penuh dari semua kelas lama dan buat artefak untuk yang baru, lihat halaman Paket Refactoring.

Berbeda dengan Perpustakaan Dukungan, paket AndroidX dipelihara dan diperbarui secara terpisah. Paket androidx menggunakan Semantic Versioning ketat yang dimulai dengan versi 1.0.0. Anda dapat memperbarui perpustakaan AndroidX di proyek Anda secara mandiri.

Semua pengembangan Perpustakaan Dukungan baru akan terjadi di perpustakaan AndroidX. Ini termasuk pemeliharaan artefak Perpustakaan Dukungan asli dan pengenalan komponen Jetpack baru.

Amiraslan
sumber
1

Pada awalnya ini adalah layar yang dimuat dengan visibilitas aset vektor gambar masukkan deskripsi gambar di sini

pada klik itu akan berubah ke visibilitas gambar ini mati masukkan deskripsi gambar di sini

kode untuk sakelar kata sandi di atas (kode 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>

Kode Java untuk operasi tombol

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

Dalam XML lakukan seperti ini

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

Ekstensi Kotlin saya. tulis sekali pakai kemana-mana

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

Anda dapat menyimpan metode ini di file apa pun dan menggunakannya di mana saja menggunakannya seperti ini

ivShowPassword.click { etPassword.tooglePassWord() }

di mana ivShowPassword diklik tampilan gambar (mata) dan etPassword adalah Editext

Aklesh Singh
sumber
0

Solusi yang bagus. Atur tombol, lalu gunakan kode ini:

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

Tambahkan metode ini:

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

Panggilan itu akan beralih di antara negara jenis input (Anda dapat mengubah transformasi Single-Line ke favorit Anda). Contoh penggunaan:

editText.revertTransformation()
Benny
sumber
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
sumber
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
sumber
-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
sumber