Android: lettertype wordt gewijzigd wanneer ik wachtwoord toepas Typ op EditText

Ik gebruik de bibliotheek FloatLabel(https://github.com/weddingparty/AndroidFloatLabel) om een ​​kleine animatie toe te voegen wanneer de gebruiker iets begint te schrijven in een EditText Android.

Mijn probleem is dat het lettertype lijkt te zijn veranderd wanneer ik het wachtwoordtype toepas op mijn EditText. Ik wil graag hetzelfde lettertype behouden als normaal. (zie foto 1)

voer hier de afbeeldingsbeschrijving in

Maar als ik de volgende regel toevoeg om het wachtwoordtype toe te passen, lijkt het lettertype van de hint te zijn gewijzigd!

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

voer hier de afbeeldingsbeschrijving in


Antwoord 1, autoriteit 100%

Het volgende kan het voor je oplossen.

pass.setTypeface(user.getTypeface());

In wezen geeft het alleen het Typefacevan uw gebruikersnaamveld door en geeft het door als het Typefacevoor uw wachtwoordveld.


Ik vond een uitleg hiervan in de Dialogs API Guide.

Tip:wanneer u standaard een EditText-element instelt om de
"textPassword"invoertype, de lettertypefamilie is ingesteld op monospace, dus u
zou zijn lettertypefamilie moeten veranderen in "sans-serif"zodat beide tekstvelden
gebruik een bijpassende letterstijl.

Met andere woorden, een reparatie die in XML kan worden gedaan, is als volgt:

<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"/>

Antwoord 2, autoriteit 4%

Om de een of andere reden hoefde ik de transformatiemethode niet in te stellen, dus dit kan een betere oplossing zijn.
In Mijn Activiteit:

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

Antwoord 3

u kunt android:hit en setHitColor gebruiken in uw activiteit, dit heeft geen invloed op de normale invoer


Antwoord 4

Stel het inputType in als “tekst” in de 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"/>

Maak vervolgens de EditText in de activiteit als

mEdtConfirmPassword = findViewById(R.id.edtPassword);
mEdtConfirmPassword.setTransformationMethod(new PasswordTransformationMethod());

Antwoord 5

Het kan laat zijn om deze vraag te beantwoorden, maar ik ben dit probleem tegengekomen. Dus dacht hier antwoord op te geven. Ik heb het opgelost door Implementing a CustomTextWatcher.

Hier is het fragment

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

Hier leest u hoe u het in uw toepassing kunt gebruiken

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

Antwoord 6

Een andere oplossing is om het typefaceop te slaan voordat u het inputTypewijzigt en het daarna opnieuw toe te passen. Vreemd genoeg gebeurt dit niet bij het instellen van het inputTypein xmlmaar bij het programmatisch instellen.

val typeface = editText.typeface
editText.inputType = inputType
editText.typeface = typeface

Other episodes