जवाबों:
आप TextView की विशेषताओं को गतिशील रूप से बदल सकते हैं। यदि आप XML एट्रिब्यूट android:password
को सेट करने के लिए सेट करते हैं, तो यह देखने के लिए कि यह दिखाया गया है कि टेक्स्ट गलत है या नहीं, यह दिखाने के लिए XML एट्रिब्यूट सेट करेगा ।
विधि setTransformationMethod के साथ आपको इस विशेषता को कोड से बदलने में सक्षम होना चाहिए। (डिसक्लेमर: मैंने यह नहीं देखा है कि क्या दृश्य प्रदर्शित होने के बाद भी विधि काम करती है। यदि आप इसके साथ समस्याओं का सामना करते हैं, तो मुझे जानने के लिए मुझे एक टिप्पणी छोड़ दें।)
पूरा नमूना कोड होगा
yourTextView.setTransformationMethod(new PasswordTransformationMethod());
पासवर्ड छिपाने के लिए। पासवर्ड दिखाने के लिए आप मौजूदा परिवर्तन विधियों में से एक को सेट कर सकते हैं या एक खाली परिवर्तन लागू कर सकते हैंमैथोड जो इनपुट टेक्स्ट के साथ कुछ भी नहीं करता है।
yourTextView.setTransformationMethod(new DoNothingTransformation());
समर्थन लाइब्रेरी v24.2.0 के बाद से इसे प्राप्त करना वास्तव में आसान है।
आपको क्या करने की ज़रूरत है:
डिज़ाइन लाइब्रेरी को अपने आश्रितों में जोड़ें
dependencies {
compile "com.android.support:design:24.2.0"
}
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
विशेषता काम करना होगा!
अपने रूट लेआउट में जोड़ना न भूलें xmlns:app="http://schemas.android.com/apk/res-auto"
आप का उपयोग करके अपने पासवर्ड टॉगल अनुकूलित कर सकते हैं:
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
android:text
विशेषता के साथ कुछ quirks हैं TextInputEditText
। आप हमेशा एंड्रॉइड के लिए Google इश्यूज़ ट्रैकर
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 को इस व्यवहार को ठीक करना चाहिए। अच्छी चर्चा
पासवर्ड के बजाय डॉट्स दिखाने के लिए पासवर्ड ट्रांसफॉर्मेशनमैथोड सेट करें:
yourEditText.setTransformationMethod(new PasswordTransformationMethod());
बेशक आप इसे xml लेआउट में अपने edittext तत्व में डिफ़ॉल्ट रूप से सेट कर सकते हैं
android:password
पढ़ने योग्य पासवर्ड को फिर से दिखाने के लिए, बस परिवर्तन विधि के रूप में रिक्त करें:
yourEditText.setTransformationMethod(null);
android:password
अब पदावनत कर दिया गया है, और आपको android:inputType
इसके बजाय उपयोग करना चाहिए ।
editText.getSelectionStart()
और editText.getSelectionEnd()
कर्सर की स्थिति को बचाने के लिए और editText.setSelection(start, end)
यह बहाल करने के लिए।
दिखाना:
editText.setInputType(InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD);
छुपाना:
editText.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD);
इनमें से प्रत्येक के बाद कर्सर रीसेट हो जाता है, इसलिए:
editText.setSelection(editText.length());
आप उपयोग कर सकते हैं 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"
।
चेकबॉक्स का उपयोग करें और तदनुसार इनपुट प्रकार बदलें।
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);
}
}
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;
}
यह मेरे लिए काम है। यह निश्चित रूप से आपकी मदद करेगा
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());
}
}
});
मुझे लगता है मैं इस सवाल का जवाब चाहता हूं यहां तक कि कुछ अच्छे जवाब भी हैं,
प्रलेखन परिवर्तन के अनुसारमेथोड हमारे मिशन को करते हैं
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());
}
मैं केवल कुछ पंक्तियों के साथ 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"
}
}
} );
...
मेरे पास एक ही मुद्दा था और इसे लागू करना बहुत आसान है।
आपको बस अपना 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>
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());
}
});
}
बहुत ही सरल रूप में:
private fun updatePasswordVisibility(editText: AppCompatEditText) {
if (editText.transformationMethod is PasswordTransformationMethod) {
editText.transformationMethod = null
} else {
editText.transformationMethod = PasswordTransformationMethod()
}
editText.setSelection(editText.length())
}
आशा करता हूँ की ये काम करेगा।
आप इसे नीचे दिए गए कोड का उपयोग करके 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());
}
}
});
इसे इस्तेमाल करे:
पहले एक झंडे को वैश्विक के रूप में परिभाषित करें:
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;
}
}
});
Https://github.com/maksim88/PasswordEditText github पर कोशिश करें । तुम भी अपने जावा कोड का उपयोग कर इसे बदलने की जरूरत नहीं है। बस बदल दो
लिखाई में बदलाव
को टैग करें
com.maksim88.passwordedittext.PasswordEditText
अपने 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>
जावा कोड
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
क्या आपने setTransformationMethod के साथ प्रयास किया था? यह TextView से विरासत में मिला है और एक पैरामीटर के रूप में एक ट्रांसफॉर्मेशनथोड चाहता है।
आप TransformationMethods के बारे में अधिक प्राप्त कर सकते हैं यहाँ ।
इसमें कुछ कूल फीचर्स भी हैं, जैसे कैरेक्टर रिप्लेसिंग।
मैंने जो किया था
आप अधिक विस्तृत चरणों और स्पष्टीकरण के लिए इस वीडियो की जांच कर सकते हैं https://youtu.be/md3eVaRzdIM
आशा करता हूँ की ये काम करेगा :)
यहाँ 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;
}
});
इस स्रोत के अनुसार , यदि आपने अपनी परियोजना को 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 लाइब्रेरी में होंगे। इसमें मूल समर्थन लाइब्रेरी कलाकृतियों का रखरखाव और नए जेटपैक घटकों की शुरूआत शामिल है।
सबसे पहले यह एक छवि वेक्टर परिसंपत्ति दृश्यता के साथ भरी हुई स्क्रीन है
क्लिक करने पर यह इस दृश्यता के दृश्य में बदल जाएगा
पासवर्ड स्विच के लिए कोड (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());
}
}
}
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;
}
मेरा कोटलिन एक्सटेंशन। हर जगह एक बार उपयोग करें
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 एडिटेक्स है
एक अच्छा उपाय। एक बटन सेट करें, फिर इस कोड का उपयोग करें:
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");
}
}
इस विधि को जोड़ें:
fun EditText.revertTransformation() {
transformationMethod = when(transformationMethod) {
is PasswordTransformationMethod -> SingleLineTransformationMethod.getInstance()
else -> PasswordTransformationMethod.getInstance()
}
}
कॉल करें यह इनपुट प्रकार स्थिति के बीच स्विच करेगा (आप अपने पसंदीदा में एकल-रेखा परिवर्तन को बदल सकते हैं)। उपयोग उदाहरण:
editText.revertTransformation()
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);
}
}
});
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);
}
}
});
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());
}
setTransformationMethod(null)
।