Je veux changer/afficher différentes icônes pour afficher le mot de passe dans Android edittext . J'utilise le code suivant pour afficher l'icône.
<Android.support.design.widget.TextInputLayout
Android:id="@+id/layoutTextInput"
Android:textColorHint="@color/aluminium">
<Android.support.v7.widget.AppCompatEditText
Android:id="@+id/editTextValue"
Android:imeOptions="actionNext"
Android:layout_marginBottom="8dp"
Android:inputType="text"/>
</Android.support.design.widget.TextInputLayout>
Je veux utiliser des icônes personnalisées à la place des icônes normales (icône pour les yeux). Aidez-moi, s'il vous plaît.
créez un nouveau fichier pouvant être dessiné et le nommant show_password_selector.xml
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:Android="http://schemas.Android.com/apk/res/Android">
<item Android:drawable="@drawable/ic_visibility_black_18dp" Android:state_checked="true"/>
<item Android:drawable="@drawable/ic_visibility_off_black_18dp"/>
</selector>
et dans votre fichier de mise en page, ajoutez l'attribut app:passwordToggleDrawable
dans TextInputLayout
<Android.support.design.widget.TextInputLayout
Android:id="@+id/layoutTextInput"
app:passwordToggleDrawable="@drawable/show_password_selector"
Android:textColorHint="@color/gray">
<Android.support.v7.widget.AppCompatEditText
Android:id="@+id/editTextValue"
Android:imeOptions="actionNext"
Android:layout_marginBottom="8dp"
Android:inputType="text"/>
</Android.support.design.widget.TextInputLayout>
Pour référence: https://www.youtube.com/watch?v=dW0YIV0Z9qk
Utilisez app:passwordToggleDrawable
pour changer l'icône . Utilisez app:passwordToggleTint
pour changer la couleur de l'icône, cela ne fonctionnera que si l'icône est un vecteur dessinable.
<Android.support.design.widget.TextInputLayout
Android:id="@+id/layoutTextInput"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
app:passwordToggleEnabled="true"
app:passwordToggleTint="@color/colorPrimary"
app:passwordToggleDrawable="@drawable/ic_visibility_on">
<Android.support.design.widget.TextInputEditText
Android:id="@+id/editTextValue"
Android:layout_width="match_parent"
Android:layout_height="60dp"
Android:drawablePadding="5dp"
Android:imeOptions="actionNext"
Android:inputType="textPassword"
Android:hint="Password"/>
</Android.support.design.widget.TextInputLayout>
Si vous souhaitez utiliser l’icône par défaut des yeux (afficher/masquer le mot de passe) mais changer la couleur de l’icône .__, il vous suffit de mettre la ligne.
app:passwordToggleTint="@color/yourColor"
Si vous souhaitez utiliser une icône pour les yeux personnalisée, vous devez utiliser
app:passwordToggleDrawable
pour changer l'icône. et utilise
app:passwordToggleTint
pour changer la couleur de l'icône. la couleur de votre icône personnalisée ne s'affiche pas. La couleur de la teinte sera affichée. Le code XML entier comme ci-dessous:
<Android.support.design.widget.TextInputLayout
Android:id="@+id/text_input_layout_password"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:textColorHint="@color/yourColor"
Android:theme="@style/TextLabelLogin"
app:hintTextAppearance="@style/TextAppearance.App.TextInputLayout"
app:passwordToggleEnabled="true"
app:passwordToggleTint="@color/yourColor"
app:passwordToggleDrawable="@drawable/show_password_selector">
<EditText
Android:id="@+id/etPassword"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:background="@drawable/bottom_line_shape"
Android:hint="@string/password"
Android:textColorHint="@color/yourColor"
Android:inputType="textPassword"
Android:textColor="@color/yourColor"/>
</Android.support.design.widget.TextInputLayout>
et show_password_selector.xml est donné ci-dessous:
<selector xmlns:Android="http://schemas.Android.com/apk/res/Android">
<item Android:drawable="@drawable/ic_hide_password" Android:state_checked="true" />
<item Android:drawable="@drawable/ic_show_password" /></selector>
J'espère que cela aidera tous.
**Add Dependency**
compile 'com.Android.support:design:25.0.1'
compile 'com.Android.support:support-v4:25.0.1'
compile 'com.Android.support:appcompat-v7:25.0.1'
compile 'com.Android.support:support-vector-drawable:25.0.1'
<Android.support.design.widget.TextInputLayout
Android:id="@+id/layout_password"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:layout_below="@id/layout_email"
Android:textColorHint="@color/colorHint"
app: passwordToggleEnabled = "true">
<EditText
Android:id="@+id/editTextPassword"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:layout_marginTop="45dp"
Android:hint="@string/hint_password"
Android:inputType="textPassword"
Android:textColor="@color/textColor" />
</Android.support.design.widget.TextInputLayout>
1.create a xml layout...I have created in my way
<FrameLayout
Android:layout_width="match_parent"
Android:layout_height="@dimen/_50dp"
Android:layout_marginTop="@dimen/_15dp">
<Android.support.v7.widget.AppCompatEditText
Android:id="@+id/etCurrentPassword"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:background="@drawable/drawable_edit_text_2"
Android:fontFamily="@font/poppins"
Android:hint="@string/old_password"
Android:inputType="textPassword"
Android:padding="@dimen/_10dp" />
<Android.support.v7.widget.AppCompatImageView
Android:id="@+id/imgShowPassword1"
Android:layout_width="@dimen/_50dp"
Android:layout_height="@dimen/_50dp"
Android:layout_gravity="end|center_vertical"
Android:layout_marginRight="@dimen/_10sp"
Android:padding="@dimen/_12dp"
Android:tint="@Android:color/darker_gray"
app:srcCompat="@drawable/ic_eye" />
</FrameLayout>
2.In activity class: call the method with the mathing parameters
showORhidePass(view,etRetypePassword,showPassword3 = !showPassword3);
void showORhidePass(AppCompatImageView imageView, AppCompatEditText editText, Boolean save){
if (TextUtils.isEmpty(editText.getText())){
return;
}
if (save){
editText.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD);
editText.setSelection(editText.length());
imageView.setColorFilter(ContextCompat.getColor(requireContext(), Android.R.color.darker_gray));
}else{
editText.setInputType(InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD);
editText.setSelection(editText.length());
imageView.setColorFilter(ContextCompat.getColor(requireContext(), R.color.colorPrimary));
}
}
Dans votre fichier XML, créez une relation relative avec TextInputLayout
et Imageview
<RelativeLayout
Android:id="@+id/relative"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:layout_below="@+id/relativeone"
Android:layout_marginLeft="16dp"
Android:layout_marginRight="16dp"
Android:orientation="horizontal"
Android:weightSum="5">
<Android.support.design.widget.TextInputLayout>
Android:id="@+id/layoutTextInput"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:layout_alignParentLeft="true"
Android:layout_alignParentStart="true"
Android:layout_gravity="center_vertical"
Android:layout_weight="5"
Android:gravity="center_vertical"
Android:hint="Password"
Android:paddingTop="4dp"
Android:textColorHint="#3f3f3f">
<EditText
Android:id="@+id/passwordedit"
Android:layout_width="match_parent"
Android:layout_height="60dp"
Android:drawableLeft="@mipmap/bluelocked"
Android:drawablePadding="13dp"
Android:gravity="center_vertical"
Android:inputType="textPassword"
Android:paddingLeft="15dp"
Android:textColor="#3f3f3f"
Android:textColorHint="#3f3f3f"
Android:textSize="13sp" />
</Android.support.design.widget.TextInputLayout>
<ImageView
Android:id="@+id/imagepassword"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_alignParentBottom="true"
Android:layout_alignParentRight="true"
Android:layout_gravity="center_vertical"
Android:paddingBottom="20dp"
Android:paddingRight="10dp"
Android:src="@mipmap/IMAGEYOUWANT" />
</RelativeLayout>
Et dans votre activité, ajoutez la méthode onTouch()
pour afficher et masquer votre mot de passe.
ImageView imagepass = (ImageView) findViewById(R.id.imagepassword);
imagepass .setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
switch (motionEvent.getAction()) {
case MotionEvent.ACTION_DOWN:
editpass.setInputType(InputType.TYPE_CLASS_TEXT);
break;
case MotionEvent.ACTION_UP:
editpass.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD);
break;
}
return true;
}
});
Je l'implémente en utilisant du texte .. qui est 'Afficher' et 'Masquer'
textViewShowPassword.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (textViewShowPassword.getText().toString().equalsIgnoreCase("Show")) {
editTextPassword.setTransformationMethod(HideReturnsTransformationMethod.getInstance());
textViewShowPassword.setText("Hide");
editTextPassword.setSelection(editTextPassword.getText().length());
} else {
textViewShowPassword.setText("Show");
editTextPassword.setTransformationMethod(new PasswordTransformationMethod());
editTextPassword.setSelection(editTextPassword.getText().length());
}
}
});
J'espère que cette aide pour vous .. !!