Android: la police de caractères est modifiée lorsque j’applique un mot de passe Tapez sur EditText

J’utilise la bibliothèque FloatLabel ( https://github.com/weddingparty/AndroidFloatLabel ) pour append un peu d’animation lorsque l’utilisateur commence à écrire quelque chose dans Android EditText.

Mon problème est que la police de caractères semble être modifiée lorsque j’applique le type de mot de passe à mon EditText. Je voudrais garder la même police de caractères que d’habitude. (voir photo 1)

entrer la description de l'image ici

Mais lorsque j’ajoute la ligne suivante pour appliquer le type de mot de passe, le caractère de l’indice semble être modifié!

pass.getEditText().setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD); 

entrer la description de l'image ici

Ce qui suit pourrait le résoudre pour vous.

 pass.setTypeface(user.getTypeface()); 

Essentiellement, il passe simplement le champ Typeface de Typeface de votre nom d’utilisateur et le passe comme Typeface de Typeface pour votre champ de mot de passe.


J’ai trouvé une explication à ce sujet dans le Guide de l’API Dialogs .

Conseil: Par défaut, lorsque vous définissez un élément EditText pour utiliser le type de saisie "textPassword" , la famille de fonts est définie sur monospace. Vous devez donc remplacer sa famille de fonts par "sans-serif" afin que les deux champs de texte utilisent une police correspondante. style.

En d’autres termes, un correctif qui peut être fait en XML serait comme suit:

  

Pour une raison quelconque, je n’ai pas eu à définir la méthode de transformation, ce qui peut constituer une meilleure solution. Dans MyActivity:

  EditText editText_password = findViewById(R.id.edittext); editText_password.setTransformationMethod(new PasswordTransformationMethod()); 

vous pouvez utiliser Android: hit et setHitColor dans votre activité, cela n’affectera pas l’entrée normale

Il est peut-être tard pour répondre à cette question mais je suis tombé sur ce problème. Alors pensé à répondre à cela. Je l’ai résolu en Implementing a CustomTextWatcher .

Voici l’extrait

 private class CustomTextWatcher implements TextWatcher { private EditText mEditText; public CustomTextWatcher(EditText e) { mEditText = e; mEditText.setTypeface(Typeface.DEFAULT); } public void beforeTextChanged(CharSequence s, int start, int count, int after) { mEditText.setTypeface(Typeface.DEFAULT); } public void onTextChanged(CharSequence s, int start, int before, int count) { mEditText.setTypeface(Typeface.MONOSPACE); } public void afterTextChanged(Editable s) { if(s.length() <= 0){ mEditText.setTypeface(Typeface.DEFAULT); } else { mEditText.setTypeface(Typeface.MONOSPACE); } } } 

Voici comment vous pouvez l'utiliser dans votre application

 EditText pin = (EditText) findViewById(R.id.pin); pin.addTextChangedListener(new CustomTextWatcher(pin));