J'utilise FloatLabel bibliothèque ( https://github.com/weddingparty/AndroidFloatLabel ) pour ajouter une petite animation lorsque l'utilisateur commence pour écrire quelque chose dans un 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)
Mais lorsque j'ajoute la ligne suivante pour appliquer le type de mot de passe, la police de caractère de l'indicateur semble être modifiée!
pass.getEditText().setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD);
Ce qui suit pourrait le résoudre pour vous.
pass.setTypeface(user.getTypeface());
Essentiellement, il passe simplement le Typeface
de votre champ de nom d'utilisateur et le passe comme Typeface
pour votre champ de mot de passe.
J'ai trouvé une explication à cela dans le Dialogs API Guide .
Astuce: Par défaut, lorsque vous définissez un élément EditText pour utiliser le
"textPassword"
type d'entrée, la famille de polices est définie sur monospace, vous devez donc changer sa famille de polices en"sans-serif"
pour que les deux champs de texte utilisent un style de police correspondant.
En d'autres termes, un correctif pouvant être effectué en XML serait le suivant:
<EditText
Android:id="@+id/password"
Android:inputType="textPassword"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:fontFamily="sans-serif"
Android:hint="@string/password"/>
Pour une raison quelconque, je n'ai pas eu à définir la méthode de transformation, donc cela peut être 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
Définissez le type d'entrée comme "texte" dans le xml,
<EditText
Android:id="@+id/edtPassword"
Android:inputType="textPassword"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:hint="@string/password"
Android:inputType="text"/>
Faites ensuite le EditText dans l'activité comme
mEdtConfirmPassword = findViewById(R.id.edtPassword);
mEdtConfirmPassword.setTransformationMethod(new PasswordTransformationMethod());
Il est peut-être tard pour répondre à cette question, mais j'ai rencontré ce problème. Alors j'ai pensé à répondre à cela. Je l'ai résolu par 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));