web-dev-qa-db-fra.com

Android: la police de caractères est modifiée lorsque j'applique le type de mot de passe sur EditText

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)

enter image description here

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

enter image description here

46
wawanopoulos

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"/>
128
Andrew Schuster

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());
4
Cüneyt

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

1
smallfatter

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());
0
Gowtham. R

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));
0
BBdev