2014-06-09 11 views
42

używam FloatLabel biblioteki (https://github.com/weddingparty/AndroidFloatLabel), aby dodać trochę animacji, gdy użytkownik zacznie pisać coś w EditText Androida.Android: Czcionka zmienia się kiedy stosuje się hasła typu na EditText

Mój problem polega na tym, że krój pisma wydaje się być zmieniony, gdy stosuję typ hasła w moim EditText. Chciałbym zachować ten sam krój czcionki co normalny. (Patrz rysunek 1)

enter image description here

Ale kiedy dodać następującą linię do zastosowania typ hasła, krój z odrobiną wydaje się zmieniło!

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

enter image description here

Odpowiedz

119

Poniższy może rozwiązać go dla Ciebie.

pass.setTypeface(user.getTypeface()); 

Zasadniczo to właśnie przechodzi Typeface swojego polu nazwy użytkownika i przekazuje je jako Typeface dla pola hasła.


Znalazłem wyjaśnienie tego w Dialogs API Guide.

Wskazówka: Domyślnie, gdy element EditText do korzystania rodzaj "textPassword" wejściowy można ustawić, rodzina czcionka jest ustawiona na monospace, więc powinien zmienić swoją rodzinę czcionek do "sans-serif" tak że obu polach tekstowych użyj pasującego stylu czcionki.

W otherwords, poprawka, które mogą być wykonane w formacie XML będzie w następujący sposób:

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

Rozwiązuje mój problem! Dzięki – wawanopoulos

+1

'fontFamily' jest wprowadzany na poziomie 16 api! co dla 2.2? –

+0

To jest właśnie rozwiązanie. Bez konieczności ustawiania rzeczy w kodzie za pomocą metody setTypeface() i setTransformationMethod(), które nawet nie działają w pełni, ponieważ następne litery, które wpisujesz, są ukryte i nie są wyświetlane – 1mike12

0

można użyć android hit i setHitColor w swojej działalności, to nie będzie miało wpływu na normalne wejście

0

Może być za późno, aby odpowiedzieć na to pytanie, ale natknąłem się na ten problem. Tak myślę, aby odpowiedzieć na to. Rozwiązałem go przez Implementing a CustomTextWatcher.

Oto urywek

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


    } 
} 

Oto jak można go używać w aplikacji

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

Z jakiegoś powodu nie musiał ustawić metodę transformacji więc może to być lepszym rozwiązaniem. W MyActivity:

EditText editText_password = findViewById(R.id.edittext); 
    editText_password.setTransformationMethod(new PasswordTransformationMethod()); 
Powiązane problemy