पासवर्ड छिपाने और देखने के बीच कैसे स्विच करें


176

क्या एंड्रॉइड EditText में उपयोगकर्ता को छिपाने और देखने के पासवर्ड के बीच स्विच करने का एक चतुर तरीका है? कई पीसी आधारित ऐप उपयोगकर्ता को ऐसा करने देते हैं।

जवाबों:


155

आप TextView की विशेषताओं को गतिशील रूप से बदल सकते हैं। यदि आप XML एट्रिब्यूट android:passwordको सेट करने के लिए सेट करते हैं, तो यह देखने के लिए कि यह दिखाया गया है कि टेक्स्ट गलत है या नहीं, यह दिखाने के लिए XML एट्रिब्यूट सेट करेगा ।

विधि setTransformationMethod के साथ आपको इस विशेषता को कोड से बदलने में सक्षम होना चाहिए। (डिसक्लेमर: मैंने यह नहीं देखा है कि क्या दृश्य प्रदर्शित होने के बाद भी विधि काम करती है। यदि आप इसके साथ समस्याओं का सामना करते हैं, तो मुझे जानने के लिए मुझे एक टिप्पणी छोड़ दें।)

पूरा नमूना कोड होगा

yourTextView.setTransformationMethod(new PasswordTransformationMethod());

पासवर्ड छिपाने के लिए। पासवर्ड दिखाने के लिए आप मौजूदा परिवर्तन विधियों में से एक को सेट कर सकते हैं या एक खाली परिवर्तन लागू कर सकते हैंमैथोड जो इनपुट टेक्स्ट के साथ कुछ भी नहीं करता है।

yourTextView.setTransformationMethod(new DoNothingTransformation());

61
पासवर्ड दिखाने के लिए, आपको कोई नई कक्षाएं बनाने की आवश्यकता नहीं है। बस बुलाओ setTransformationMethod(null)
मैट क्विगले

4
@ जानुसज़, निम्नलिखित का उपयोग करने से गुड्डा घोल देगा। setTransformationMethod (PasswordTransformationMethod.getInstance ()); और setTransformationMethod (HideReturnsTransformationMethod.getInstance ());
सुजीत

@ जानूसज़, लेकिन कीबोर्ड में शो / हाइड कुंजियाँ कैसे प्राप्त करें?
नरेंद्र सिंह

जब एडिटटेक्स्ट पर सेटट्रेनफॉर्म मैथोड को कॉल किया जाता है, तो एडिट टेक्स्ट के ऑनटेन्चचेंज कॉलबैक को कॉल किया जा रहा है ... क्या यह संभव नहीं है कि ऐसा नहीं हो रहा है?
tsiro

1
सही बात। "SetTransformationMethod () कुंजी है। आपको केवल अपने श्रोता पर स्विच करने की आवश्यकता है: etPassword.setTransformationMethod (null) / etPassword.setTransformationMethod (new newTransformationMethod ())। डिफ़ॉल्ट रूप से, अपने xml में सेट करें EditView" android: inputType = text ""
सर्गियो

303

समर्थन लाइब्रेरी v24.2.0 के बाद से इसे प्राप्त करना वास्तव में आसान है।

आपको क्या करने की ज़रूरत है:

  1. डिज़ाइन लाइब्रेरी को अपने आश्रितों में जोड़ें

    dependencies {
         compile "com.android.support:design:24.2.0"
    }
  2. TextInputEditTextके साथ संयोजन में उपयोग करेंTextInputLayout

    <android.support.design.widget.TextInputLayout
        android:id="@+id/etPasswordLayout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:passwordToggleEnabled="true"
        android:layout_marginBottom="@dimen/login_spacing_bottom">
    
        <android.support.design.widget.TextInputEditText
            android:id="@+id/etPassword"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:hint="@string/fragment_login_password_hint"
            android:inputType="textPassword"/>
    </android.support.design.widget.TextInputLayout>

passwordToggleEnabledविशेषता काम करना होगा!

  1. अपने रूट लेआउट में जोड़ना न भूलें xmlns:app="http://schemas.android.com/apk/res-auto"

  2. आप का उपयोग करके अपने पासवर्ड टॉगल अनुकूलित कर सकते हैं:

app:passwordToggleDrawable- पासवर्ड इनपुट दृश्यता टॉगल आइकन के रूप में उपयोग करने योग्य।
app:passwordToggleTint- पासवर्ड इनपुट दृश्यता टॉगल के लिए उपयोग करने के लिए आइकन।
app:passwordToggleTintMode- सम्मिश्रण मोड का उपयोग पृष्ठभूमि टिंट को लागू करने के लिए किया जाता है।

TextInputLayout प्रलेखन में अधिक जानकारी ।

यहां छवि विवरण दर्ज करें

AndroidX के लिए

  • बदलें android.support.design.widget.TextInputLayoutके साथcom.google.android.material.textfield.TextInputLayout

  • बदलें android.support.design.widget.TextInputEditTextके साथcom.google.android.material.textfield.TextInputEditText


संस्करण 25.1.0 में मेरे पास एक अजीब व्यवहार है: यह पासवर्ड को एक बार टॉगल करता है, लेकिन यदि आप इसे दबाते हैं, तो यह
ओ_ओ

1
हाँ, वहाँ भी android:textविशेषता के साथ कुछ quirks हैं TextInputEditText। आप हमेशा एंड्रॉइड के लिए Google इश्यूज़ ट्रैकर
mmBs

1
@ Delta7 कुछ तरीके और वर्कअराउंड हैं। कृपया, एसओ पर सवाल पूछें, यहां एक लिंक पेस्ट करें और मैं आपकी मदद करने की कोशिश करूंगा।
मिमीबी

1
धन्यवाद। हालाँकि, मेरे बिल्ड में शो / हिडन ग्राफिक्स अजीब तरह से आपके स्क्रीनशॉट से उलट हैं - यह पासवर्ड छिपाए जाने पर क्रॉस-आउट-आंख दिखाता है - मुझे लगता है कि किसी ने निर्णय लिया बटन कार्रवाई (या लक्ष्य राज्य) के बजाय वर्तमान स्थिति दिखाना चाहिए।
जोश सटरफील्ड

1
@ जोशसटरफील्ड सहमत हैं। इसलिए अगर हम एक्शन बटन चाहते हैं, तो हमें इसे मैन्युअल रूप से app:passwordToggleDrawable(पदावनत) का उपयोग करके रिवर्स करना होगा या app:endIconDrawableफिर कस्टम ड्रॉबल का उपयोग करना होगा जैसे <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:drawable="@drawable/ic_eye_close" android:state_checked="true"/> <item android:drawable="@drawable/ic_eye_open"/> </selector> मुझे लगता है कि Google को इस व्यवहार को ठीक करना चाहिए। अच्छी चर्चा
रहमत इहसन

112

पासवर्ड के बजाय डॉट्स दिखाने के लिए पासवर्ड ट्रांसफॉर्मेशनमैथोड सेट करें:

yourEditText.setTransformationMethod(new PasswordTransformationMethod());

बेशक आप इसे xml लेआउट में अपने edittext तत्व में डिफ़ॉल्ट रूप से सेट कर सकते हैं

android:password

पढ़ने योग्य पासवर्ड को फिर से दिखाने के लिए, बस परिवर्तन विधि के रूप में रिक्त करें:

yourEditText.setTransformationMethod(null);

7
android:passwordअब पदावनत कर दिया गया है, और आपको android:inputTypeइसके बजाय उपयोग करना चाहिए ।
विल्का

54
आप परिवर्तन विधि सेट करने और इसके बाद पुनर्स्थापित करने से पहले कर्सर स्थिति को सहेजकर अपने उपयोगकर्ताओं को खुश भी कर सकते हैं। का प्रयोग करें editText.getSelectionStart()और editText.getSelectionEnd()कर्सर की स्थिति को बचाने के लिए और editText.setSelection(start, end)यह बहाल करने के लिए।
मुस्तफा

2
@Wilka: android: inputType आपको रन-टाइम में दो राज्यों के बीच आगे और पीछे नहीं जाने देता। यह केवल आपको एक बार स्विच करने की अनुमति देता है और एक बार जब आप इसे बदल देते हैं, तो आप इसे वापस नहीं बदल सकते। और नहीं, setTransformationMethod को पदावनत नहीं किया गया है।
AndroidDev

@ क्यूलीमैक्स लेकिन कीबोर्ड में कीज़ / शो कीज़ कैसे प्राप्त करें?
नरेन्द्र सिंह

@DroidWormNarendra आप आमतौर पर एक इवेंट श्रोता को आपके पासवर्ड इनपुट के बीच, या आपके पासवर्ड इनपुट के बीच "आंख की छवि" के रूप में देते हैं जैसे कि यहां बताया गया है: stackoverflow.com/questions/3554377/… । फिर इस ईवेंट श्रोता में आप पासवर्ड दिखा / छिपा सकते हैं। AFAIK को कीबोर्ड में कुछ शो /
हिडन कीज़ रखना

82

दिखाना:

editText.setInputType(InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD);

छुपाना:

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

इनमें से प्रत्येक के बाद कर्सर रीसेट हो जाता है, इसलिए:

editText.setSelection(editText.length());

एंड्रॉइड 4.3 और 5.0 पर परीक्षण किया गया, महान काम करता है! डॉक्स यह दिखता है कि यह एपीआई 3 से नीचे सभी तरह से काम करना चाहिए।
जेम्स

@MattLogan लेकिन कीबोर्ड में शो / हाइड कीज़ कैसे प्राप्त करें?
नरेन्द्र सिंह

5
यह यहां सबसे सीधे आगे का जवाब है। धन्यवाद। (अजीब बात है कि इसे स्वीकार नहीं किया गया है)
टीना

यह रनटाइम में परिवर्तित होने पर काम नहीं करता है। यह लाइन के अंत में नहीं होने पर उपयोगकर्ता के अंतिम कर्सर की स्थिति / चयन को भी पुनर्स्थापित नहीं करेगा।
टॉम

31

आप उपयोग कर सकते हैं app:passwordToggleEnabled="true"

यहाँ नीचे उदाहरण दिया गया है

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

आज यह उत्तर का उपयोग करने के लिए एक पसंदीदा होना चाहिए
रुस्लान बिर्ज़ोव

यह मेरे मामले में दृश्य की ऊंचाई बढ़ाता है। क्या टॉगल करने योग्य से पैडिंग को हटाने का कोई तरीका है।
सददा हुसैन

यह भौतिक घटकों में पदावनत है। का उपयोग करें app:endIconMode="password_toggle"
निकोलस

13

चेकबॉक्स का उपयोग करें और तदनुसार इनपुट प्रकार बदलें।

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

8
private boolean isPasswordVisible;

private TextInputEditText firstEditText;

...

firstEditText = findViewById(R.id.et_first);

...

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

पाठ को फिर से सेट करने की आवश्यकता नहीं है केवल firstEditText.invalidate () को कॉल करें;
गुणवंत पटेल

7

यह मेरे लिए काम है। यह निश्चित रूप से आपकी मदद करेगा

showpass.setOnCheckedChangeListener(new OnCheckedChangeListener() {

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

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

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

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

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

            }
        });

5

मुझे लगता है मैं इस सवाल का जवाब चाहता हूं यहां तक ​​कि कुछ अच्छे जवाब भी हैं,

प्रलेखन परिवर्तन के अनुसारमेथोड हमारे मिशन को करते हैं

TransformationMethod

TextView ट्रांसफॉर्ममैथोड्स का उपयोग उन चीजों को करने के लिए करता है जैसे कि पासवर्ड के अक्षरों को डॉट्स के साथ बदलना, या सिंगल-लाइन टेक्स्ट फ़ील्ड में लाइन ब्रेक के कारण न्यूलाइन वर्णों को रखना।

ध्यान दें कि मैं बटर नाइफ का उपयोग करता हूं, लेकिन यदि उपयोगकर्ता चेक पासवर्ड दिखाता है तो यह वही है

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

5

मैं केवल कुछ पंक्तियों के साथ ShowPassword / HidePassword कोड जोड़ने में सक्षम हूं, एक ब्लॉक में स्व-निहित:

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

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

5

मेरे पास एक ही मुद्दा था और इसे लागू करना बहुत आसान है।

आपको बस अपना EditText फ़ील्ड एक (com.google.android.material.textfield.TextInputLayout) में लपेटना है और उस ऐड में (ऐप: passwordToggleEnabled = "true") जोड़ें।

यह EditText फ़ील्ड में आंख दिखाएगा और जब आप उस पर क्लिक करेंगे तो पासवर्ड दिखाई देगा और फिर से क्लिक करने पर गायब हो जाएगा।

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

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

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

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


            paswword.setSelection(paswword.length());

        }
    });
}

4

बहुत ही सरल रूप में:

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

आशा करता हूँ की ये काम करेगा।


3

आप इसे नीचे दिए गए कोड का उपयोग करके SHOW / HIDE पासवर्ड कर सकते हैं:

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

जावा कोड:

EditText mEtPwd;
CheckBox mCbShowPwd;


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

mCbShowPwd.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
    @Override
    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
        // checkbox status is changed from uncheck to checked.
        if (!isChecked) {
            // show password
            mEtPwd.setTransformationMethod(PasswordTransformationMethod.getInstance());
        } else {
            // hide password
            mEtPwd.setTransformationMethod(HideReturnsTransformationMethod.getInstance());
        }
    }
});

3

इसे इस्तेमाल करे:

पहले एक झंडे को वैश्विक के रूप में परिभाषित करें:

private boolean isShowPassword = false;

और श्रोता को शो पर टैप हैंडल करने और पासवर्ड बटन छिपाने के लिए सेट करें:

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

2

Https://github.com/maksim88/PasswordEditText github पर कोशिश करें । तुम भी अपने जावा कोड का उपयोग कर इसे बदलने की जरूरत नहीं है। बस बदल दो

लिखाई में बदलाव

को टैग करें

com.maksim88.passwordedittext.PasswordEditText

अपने XML फ़ाइल में।


क्या आपके पास इस घटक के साथ
सेटएयर

2

चेक बॉक्स के साथ Edit_Text पासवर्ड दिखाएँ और छिपाएँ

एक्सएमएल

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

जावा कोड

package com.example.root.sql2;

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

public class password extends AppCompatActivity {


    EditText password;
    CheckBox show_hide_password;

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



    }//end onCreate



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

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




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



}// end class

2

क्या आपने setTransformationMethod के साथ प्रयास किया था? यह TextView से विरासत में मिला है और एक पैरामीटर के रूप में एक ट्रांसफॉर्मेशनथोड चाहता है।

आप TransformationMethods के बारे में अधिक प्राप्त कर सकते हैं यहाँ

इसमें कुछ कूल फीचर्स भी हैं, जैसे कैरेक्टर रिप्लेसिंग।


2
उत्तर में लिंक मृत है - "स्थिति कोड: 404 नहीं मिला"
पैंग

Android के परिवर्तन के तरीकों के बारे में जानकारी के लिए डेवलपर. android.com/reference/android/text/method/… बेहतर यूआरएल हो सकता है।
Mr.Drew

1

मैंने जो किया था

  1. एक संपादित पाठ दृश्य और एक सामान्य पाठ दृश्य बनाएँ
  2. बाधा लेआउट का उपयोग करके उन्हें एक दूसरे के साथ ओवरलैप करें (फेसबुक ऐप लॉगिन स्क्रीन की तरह)
  3. एक onClickListener को सामान्य पाठ दृश्य में संलग्न करें ताकि यह तदनुसार संपादित पाठ दृश्य के इनपुट प्रकार को बदल दे (दृश्यमान / गैर-दृश्यमान)

आप अधिक विस्तृत चरणों और स्पष्टीकरण के लिए इस वीडियो की जांच कर सकते हैं https://youtu.be/md3eVaRzdIM

आशा करता हूँ की ये काम करेगा :)


1

यहाँ TextInputEditText और परिवर्तन विधि का उपयोग किए बिना मेरा समाधान है।

एक्सएमएल

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

जावा कोड

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

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

1

इस स्रोत के अनुसार , यदि आपने अपनी परियोजना को AndroidX में स्थानांतरित कर दिया है, तो आप प्रतिस्थापित कर सकते हैं

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

साथ में

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

फिर आपको केवल अपनी लेआउट फ़ाइल के नीचे दिए गए कोड को डालना है:

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

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

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

सामग्री के बारे में अधिक जानकारी यहांTextInputLayout पाई जा सकती है

इस स्रोत के लिए , Android सहायता लाइब्रेरी से AndroidX पर माइग्रेट करने की अनुशंसा की जाती है:

AndroidX ओपन-सोर्स प्रोजेक्ट है जिसका उपयोग एंड्रॉइड टीम Jetpack के भीतर विकसित, परीक्षण, पैकेज, संस्करण और रिलीज़ लाइब्रेरी के लिए करती है।

AndroidX मूल Android समर्थन लाइब्रेरी के लिए एक बड़ा सुधार है। सपोर्ट लाइब्रेरी की तरह, एंड्रॉइड ओएस से एंड्रॉइड एक्स जहाजों को अलग करता है और एंड्रॉइड रिलीज के दौरान पीछे की ओर संगतता प्रदान करता है। AndroidX फ़ीचर समानता और नई लाइब्रेरी प्रदान करके पूरी तरह से समर्थन लाइब्रेरी की जगह लेता है। इसके अलावा AndroidX में निम्नलिखित विशेषताएं शामिल हैं:

AndroidX के सभी पैकेज स्ट्रिंग नेमेक्स के साथ शुरू होने वाले एक सुसंगत नेमस्पेस में रहते हैं। समर्थन लाइब्रेरी पैकेज को संबंधित androidx। * पैकेज में मैप किया गया है। सभी पुराने वर्गों की पूरी मैपिंग के लिए और नए लोगों के लिए कलाकृतियों का निर्माण, पैकेज रीफैक्टरिंग पेज देखें।

सपोर्ट लाइब्रेरी के विपरीत, AndroidX पैकेज अलग से बनाए और अपडेट किए जाते हैं। Androidx संकुल संस्करण 1.0.0 से शुरू होने वाले सख्त शब्दार्थ संस्करण का उपयोग करते हैं। आप अपने प्रोजेक्ट में AndroidX लाइब्रेरी को स्वतंत्र रूप से अपडेट कर सकते हैं।

सभी नए समर्थन लाइब्रेरी विकास AndroidX लाइब्रेरी में होंगे। इसमें मूल समर्थन लाइब्रेरी कलाकृतियों का रखरखाव और नए जेटपैक घटकों की शुरूआत शामिल है।


1

सबसे पहले यह एक छवि वेक्टर परिसंपत्ति दृश्यता के साथ भरी हुई स्क्रीन है यहां छवि विवरण दर्ज करें

क्लिक करने पर यह इस दृश्यता के दृश्य में बदल जाएगा यहां छवि विवरण दर्ज करें

पासवर्ड स्विच के लिए कोड (xml कोड)

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

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

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

बटन संचालन के लिए जावा कोड

public void ShowHidePass(View view) {

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

0

XML में इस तरह करते हैं

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

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

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

0

मेरा कोटलिन एक्सटेंशन। हर जगह एक बार उपयोग करें

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

this.setSelection(this.length()) }

आप इस विधि को किसी भी फाइल में रख सकते हैं और इसका उपयोग हर जगह इस तरह से कर सकते हैं

ivShowPassword.click { etPassword.tooglePassWord() }

जहाँ ivShowPassword पर क्लिक किया गया चित्र-चित्र (आँख) और etPassword एडिटेक्स है


0

एक अच्छा उपाय। एक बटन सेट करें, फिर इस कोड का उपयोग करें:

public void showPassword(View v)
{

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

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


}

0

इस विधि को जोड़ें:

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

कॉल करें यह इनपुट प्रकार स्थिति के बीच स्विच करेगा (आप अपने पसंदीदा में एकल-रेखा परिवर्तन को बदल सकते हैं)। उपयोग उदाहरण:

editText.revertTransformation()

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

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

2>set "show_password_selector" file into imageview.

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

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

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

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

2>set "show_password_selector" file into imageview.

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

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

-2
if (inputPassword.getTransformationMethod() == PasswordTransformationMethod.getInstance()) {
 //password is visible
                inputPassword.setTransformationMethod(HideReturnsTransformationMethod.getInstance());
            }
else if(inputPassword.getTransformationMethod() == HideReturnsTransformationMethod.getInstance()) {
 //password is hidden
                inputPassword.setTransformationMethod(PasswordTransformationMethod.getInstance());
            }
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.