Czcionka podpowiedzi do hasła w systemie Android


255

Kiedy EditText jest w trybie hasła, wydaje się, że podpowiedź jest wyświetlana inną czcionką (kurier?). Jak mogę tego uniknąć? Chciałbym, aby podpowiedź pojawiła się w tej samej czcionce, gdy tekst EditText nie jest w trybie hasła.

Mój obecny xml:

<EditText 
android:hint="@string/edt_password_hint"
android:layout_width="fill_parent"
android:layout_height="wrap_content" 
android:password="true"
android:singleLine="true" />

1
Pamiętaj, że nie wszystkie urządzenia zachowują się w ten sposób. Tak działa „HTC One X @ 4.1.1” (monospace). „Samsung GT-7510 @ 4.0.4” nie. (ta sama czcionka)
Loda

1
Takie samo zachowanie w systemie LeWa OS 4.2.2. Zbyt niekonsekwentnie API ..
ruX

nadal istnieje w Lollipop
Mightian

możesz sprawdzić moją odpowiedź tutaj, mam nadzieję, że zadziała.
Dmila Ram,

Odpowiedzi:


394

Zmiana kroju pisma w xml również nie działała dla tekstu podpowiedzi. Znalazłem dwa różne rozwiązania, z których drugie ma dla mnie lepsze zachowanie:

1) Usuń android:inputType="textPassword"z pliku xml i zamiast tego ustaw go w Javie:

EditText password = (EditText) findViewById(R.id.password_text);
password.setTransformationMethod(new PasswordTransformationMethod());

Przy takim podejściu czcionka podpowiedzi wygląda dobrze, ale podczas pisania w tym polu edycyjnym nie widzisz każdego znaku w postaci zwykłego tekstu, zanim zmieni się on w kropkę hasła. Również podczas wprowadzania w trybie pełnoekranowym kropki nie pojawią się, ale hasło w postaci zwykłego tekstu.

2) Pozostaw android:inputType="textPassword"w swoim xml. W Javie TAKŻE ustaw czcionkę i hasło Metoda:

EditText password = (EditText) findViewById(R.id.register_password_text);
password.setTypeface(Typeface.DEFAULT);
password.setTransformationMethod(new PasswordTransformationMethod());

To podejście dało mi czcionkę podpowiedzi, którą chciałem ORAZ daje mi pożądane zachowanie z kropkami hasła.

Mam nadzieję, że to pomaga!


3
Świetnie, to jest jakieś dziwne zachowanie, którego nie spodziewałbyś się po domyślnym!
Sander Versluys

15
Czy to password.setTransformationMethod(new PasswordTransformationMethod());konieczne? Wygląda na to, że działa dobrze dla mnie bez.
loeschg

1
Nie musiałem używać setTransformationMethod()żadnego z nich. Istnieją jednak pewne skutki uboczne tego podejścia, które powodują, że jest on niepożądany, ponieważ skutkuje niestandardowym zachowaniem w porównaniu z textPasswordzachowaniem domyślnym . Aby uzyskać bardziej kompletne rozwiązanie, zobacz klasę pomocników pod adresem: stackoverflow.com/a/17582092/231078
Joe

10
Jeszcze lepiej, spójrz na to świetne proste rozwiązanie w odpowiedzi na tej stronie: stackoverflow.com/a/18073897
Marcin Koziński

16
Należy pamiętać, że użycie pierwszego rozwiązania jest złym pomysłem - użytkownicy, którzy mają włączoną funkcję automatycznego sugerowania, zaczną widzieć swoje hasło w innych sugerowanych im aplikacjach, ponieważ EditText nie został zadeklarowany jakoinputType="textPassword"
Elad Nava

193

Znalazłem tę przydatną wskazówkę z Przewodnika po oknach dialogowych

Wskazówka: Domyślnie po ustawieniu elementu EditText na typ wejściowy „textPassword” rodzina czcionek jest ustawiona na monospace, dlatego należy zmienić rodzinę czcionek na „sans-serif”, aby oba pola tekstowe używały pasującej czcionki styl.


Na przykład

android:fontFamily="sans-serif"

21
To powinna być zaakceptowana odpowiedź. To jest prostsze i pochodzi z dokumentów.
Marcin Koziński,

29
Jest dobry, z tym wyjątkiem, że działa tylko na poziomie API 16 i wyższym
Ben Clayton

6
Pamiętaj, że chociaż działa tylko na poziomie API 16 i wyższym, atrybuty xml nie powodują awarii na starszych urządzeniach, są po prostu ignorowane.
Adam Johns

Nie zadziała, jeśli klikniesz kilka razy pokaż / ukryj hasło
Ali Habbash,

32

Właśnie to zrobiłem, aby rozwiązać ten problem. Z jakiegoś powodu nie musiałem ustawiać metody transformacji, więc może to być lepsze rozwiązanie:

W moim xml:

<EditText
    android:id="@+id/password_edit_field"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:hint="Password"
    android:inputType="textPassword" />

W moim Activity:

EditText password = (EditText) findViewById( R.id.password_edit_field );
password.setTypeface( Typeface.DEFAULT );

Właśnie wypróbowałem to z textPassword w XML i tak jak robiłeś to w pliku .java, i zadziałało dobrze. Dla mnie nie wymagało to transformacji
Joe Plante

2
Przypomnienie: Wywołaj setTypeface () PO zmianie typu InputType według kodu. setTransformationMethod nie jest potrzebny, jeśli InputType zawiera xx_VARIATION_PASSWORD;
Loda,

21

Podejście setTransformationMethod łamie Androida: imeOption dla mnie i umożliwia wpisywanie zwrotów karetki w polu hasła. Zamiast tego robię to:

setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD);
setTypeface(Typeface.DEFAULT);

I nie ustawiam Androida: hasło = „prawda” w XML.


tak, to zadziałało również dla mnie w wersji 6.0.1, wybrana odpowiedź nie
Nactus,

5

Podana odpowiedź manisha działa, ale pozostawia pole hasła w niestandardowym stanie w porównaniu do domyślnego. Oznacza to, że domyślna czcionka dotyczy również pola hasła, w tym zarówno zamiany kropek, jak i znaków podglądu, które pojawiają się przed zastąpieniem kropkami (a także wtedy, gdy jest to pole „widoczne hasło”).

Aby to naprawić i sprawić, aby 1) wyglądał i działał dokładnie tak, jak domyślny textPasswordtyp wprowadzania, ale także 2) pozwalał, aby tekst podpowiedzi pojawiał się w domyślnej (innej niż spacje) czcionce, musisz mieć TextWatcherpole, które może przełączać czcionka poprawnie tam iz powrotem pomiędzy Typeface.DEFAULTi Typeface.MONOSPACEna podstawie tego, czy jest pusta, czy nie. Stworzyłem klasę pomocnika, której można użyć do osiągnięcia tego:

import android.graphics.Typeface;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.inputmethod.EditorInfo;
import android.widget.TextView;

/**
 * This class watches the text input in a password field in order to toggle the field's font so that the hint text
 * appears in a normal font and the password appears as monospace.
 *
 * <p />
 * Works around an issue with the Hint typeface.
 *
 * @author jhansche
 * @see <a
 * href="http://stackoverflow.com/questions/3406534/password-hint-font-in-android">http://stackoverflow.com/questions/3406534/password-hint-font-in-android</a>
 */
public class PasswordFontfaceWatcher implements TextWatcher {
    private static final int TEXT_VARIATION_PASSWORD =
            (EditorInfo.TYPE_CLASS_TEXT | EditorInfo.TYPE_TEXT_VARIATION_PASSWORD);
    private TextView mView;

    /**
     * Register a new watcher for this {@code TextView} to alter the fontface based on the field's contents.
     *
     * <p />
     * This is only necessary for a textPassword field that has a non-empty hint text. A view not meeting these
     * conditions will incur no side effects.
     *
     * @param view
     */
    public static void register(TextView view) {
        final CharSequence hint = view.getHint();
        final int inputType = view.getInputType();
        final boolean isPassword = ((inputType & (EditorInfo.TYPE_MASK_CLASS | EditorInfo.TYPE_MASK_VARIATION))
                == TEXT_VARIATION_PASSWORD);

        if (isPassword && hint != null && !"".equals(hint)) {
            PasswordFontfaceWatcher obj = new PasswordFontfaceWatcher(view);
            view.addTextChangedListener(obj);

            if (view.length() > 0) {
                obj.setMonospaceFont();
            } else {
                obj.setDefaultFont();
            }
        }
    }

    public PasswordFontfaceWatcher(TextView view) {
        mView = view;
    }

    public void onTextChanged(final CharSequence s, final int start, final int before, final int count) {
        // Not needed
    }

    public void beforeTextChanged(final CharSequence s, final int start, final int count, final int after) {
        if (s.length() == 0 && after > 0) {
            // Input field went from empty to non-empty
            setMonospaceFont();
        }
    }

    public void afterTextChanged(final Editable s) {
        if (s.length() == 0) {
            // Input field went from non-empty to empty
            setDefaultFont();
        }
    }

    public void setDefaultFont() {
        mView.setTypeface(Typeface.DEFAULT);
    }

    public void setMonospaceFont() {
        mView.setTypeface(Typeface.MONOSPACE);
    }
}

Aby z niego skorzystać, wystarczy wywołać register(View)metodę statyczną. Cała reszta jest automatyczna (w tym pomijanie obejścia, jeśli widok tego nie wymaga!):

    final EditText txtPassword = (EditText) view.findViewById(R.id.txt_password);
    PasswordFontfaceWatcher.register(txtPassword);

1
Dobra robota. Jedna mała zmiana: jeśli ustawisz czcionkę na EditText(np. Tekst podpowiedzi Roboto Light), ustawienie Typeface.DEFAULTpóźniej zastąpi to. Dzwonię field.getTypeface()z przodu i używam tego kroju pisma, ilekroć muszę później zresetować czcionkę „domyślną”.
Christopher Orr,

Cóż, wywoływanie field.getTypeface()nie wydaje się być w 100% niezawodne (jak często odzyskujesz czcionkę o stałej szerokości), ale tworzenie kroju pisma poprzez, Typeface.create()a następnie ustawienie, które wydaje się działać dobrze.
Christopher Orr

5

Istnieje wiele sposobów rozwiązania tego problemu, ale każdy sposób ma zalety i wady. Oto moje testy

I tylko twarz tego problemu czcionki w jakimś urządzeniu (lista na końcu mojej odpowiedzi) kiedy włączyć hasło wejściowy

edtPassword.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD);

Jeśli użyję android:inputType="textPassword", ten problem się nie zdarzy

Coś, co próbowałem

1) Użyj setTransformationMethodzamiast tegoinputType

edtPassword.setTransformationMethod(PasswordTransformationMethod.getInstance());
  • Czcionka będzie działać dobrze
  • Klawiatura nie wyświetla się zbyt dobrze (wyświetla tylko tekst, nie wyświetlaj liczby nad tekstem)

2) Użyj Typeface.DEFAULT

setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD);
setTypeface(Typeface.DEFAULT);
  • Klawiatura wyświetla się dobrze ,
  • Czcionka może nie działać dobrze . Przykład sans-serif-lightjest domyślną czcionką dla wszystkich Vieww mojej aplikacji => po setTypeface(Typeface.DEFAULT)tym EditTextczcionka nadal wygląda inaczej na niektórych urządzeniach

3) Użyj android:fontFamily="sans-serif"

MOJE ROZWIĄZANIE

buforuj krój pisma przed setInputTypeużyciem, a następnie użyj go ponownie

Typeface cache = edtPassword.getTypeface();
edtPassword.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD);
edtPassword.setTypeface(cache);

Testowanie
Problem z czcionkami na urządzeniu

  • Xiaomi A2 (8.0.1)
  • Pixel XL (8.1.0)
  • Sony Xperia Z5 Au (SOV32) (6.0)
  • Arrow NX (F-04G) (6.0.1)
  • Kyocera (S2) (7.0)

Niektóre urządzenia nie mają problemów z czcionkami

  • Samsung S4 (SC-04E) (5.0.1)
  • Samsung Galaxy Node 5 (5.1.1)
  • Samsung S7 Edge (SM-G935F) (7.0)

Co to jest urządzenie (nazwa i system operacyjny)?
CoolMind,

1
@CoolMind dziękuję za sugestię, mam aktualizację problemu z czcionką urządzenia i problem z czcionką inną niż podstawa mojego obecnego urządzenia
Phan Van Linh

Dziękujemy za duże testy! Przyjechałem do niej ze stackoverflow.com/a/52178340/2914140 . Na Samsung S4 zastosowałem setTransformationMethodmetodę (gdzie nie napotkałem problemu).
CoolMind,

Jak wspomniałem w mojej odpowiedzi, setTransformationMethodbędzie działać, ale klawiatura nie będzie wyświetlać się dobrze. Jednakże, jeśli OKE z nim, to nadal OKE bo to tylko mały problem
Phan Van Linh

4

Inne odpowiedzi są właściwym rozwiązaniem dla większości przypadków.

Jeśli jednak używasz niestandardowej EditTextpodklasy do, powiedzmy, domyślnego zastosowania niestandardowej czcionki, istnieje subtelny problem. Jeśli ustawisz niestandardową czcionkę w konstruktorze podklasy, nadal zostanie ona nadpisana przez system, jeśli ją ustawisz inputType="textPassword".

W takim przypadku przenieś styl na onAttachedToWindowpo zakończeniu super.onAttachedToWindowrozmowy.

Przykładowa implementacja:

package net.petosky.android.ui;

import android.content.Context;
import android.graphics.Typeface;
import android.util.AttributeSet;
import android.widget.EditText;

/**
 * An EditText that applies a custom font.
 *
 * @author cory@petosky.net
 */
public class EditTextWithCustomFont extends EditText {

    private static Typeface customTypeface;

    public EditTextWithCustomFont(Context context) {
        super(context);
    }

    public EditTextWithCustomFont(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public EditTextWithCustomFont(
            Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    /**
     * Load and store the custom typeface for this app.
     *
     * You should have a font file in: project-root/assets/fonts/
     */
    private static Typeface getTypeface(Context context) {
        if (customTypeface == null) {
            customTypeface = Typeface.createFromAsset(
                    context.getAssets(), "fonts/my_font.ttf");
        }
        return customTypeface;
    }

    /**
     * Set a custom font for our EditText.
     *
     * We do this in onAttachedToWindow instead of the constructor to support
     * password input types. Internally in TextView, setting the password
     * input type overwrites the specified typeface with the system default
     * monospace.
     */
    @Override protected void onAttachedToWindow() {
        super.onAttachedToWindow();
        // Our fonts aren't present in developer tools, like live UI
        // preview in AndroidStudio.
        if (!isInEditMode()) {
            setTypeface(getTypeface(getContext()));
        }
    }
}

3

Wiem, że to może być starszy, ale wpadłem na coś związanego z tym problemem, kiedy korzystałem InputTypei app:passwordToggleEnabled="true"razem.

Pisząc to, może to komuś pomóc.

Chcę użyć niestandardowej czcionki do pola hasła wraz z app:passwordToggleEnabledopcją dla mojego pola wprowadzania hasła. Ale w 27.1.1 (podczas pisania tego) biblioteki wsparcia, zawiesił się.

Więc kod był jak poniżej,

<android.support.design.widget.TextInputLayout
        android:id="@+id/input_password"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginBottom="@dimen/_10dp"
        android:layout_marginTop="@dimen/_32dp"
        android:hint="@string/current_password"
        android:textColorHint="@color/hint_text_color"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:passwordToggleEnabled="true"
        app:passwordToggleTint="@color/black">


        <EditText
            android:id="@+id/password"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_gravity="start|left"
            android:maxLines="1"
            android:textAlignment="viewStart"
            android:textColor="@color/black"
            android:textColorHint="@color/camel"
            android:textSize="@dimen/txt_16sp"
            app:font_style="regular"
            app:drawableEnd="@drawable/ic_remove_eye" />

    </android.support.design.widget.TextInputLayout>

Powyższy kod nie został inputTypezdefiniowany w XML

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

A w Javie setTransformationMethodpomoże mi zdobyć właściwości textPasswordtypu wejściowego, a także cieszę się z mojego niestandardowego stylu czcionki.

Ale wspomniana poniżej awaria zdarzyła się na wszystkich poziomach API z biblioteką wsparcia 27.1.1.

java.lang.NullPointerException: Próba wywołania metody wirtualnej „void android.support.design.widget.CheckableImageButton.setChecked (boolean)” w odwołaniu do obiektu o wartości null

To się zawiesiło z powodu klasy onRestoreInstanceStatewewnętrznej TextInputLayout.

Odtwórz kroki: Przełącz widoczność hasła i zminimalizuj aplikację i otwórz ją z najnowszych aplikacji. Uh, ho rozbił się!

Potrzebuję tylko domyślnej opcji przełączania hasła (przy użyciu biblioteki pomocy) i niestandardowej czcionki w polu wprowadzania hasła.

Po pewnym czasie zorientowałem się, wykonując poniższe czynności,

<android.support.design.widget.TextInputLayout
        android:id="@+id/input_password"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginBottom="@dimen/_10dp"
        android:layout_marginTop="@dimen/_32dp"
        android:hint="@string/current_password"
        android:textColorHint="@color/hint_text_color"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:passwordToggleEnabled="true"
        app:passwordToggleTint="@color/black">


        <EditText
            android:id="@+id/password"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_gravity="start|left"
            android:maxLines="1"
            android:textAlignment="viewStart"
            android:textColor="@color/black"
            android:textColorHint="@color/camel"
            android:textSize="@dimen/txt_16sp"
            app:font_style="regular"
            app:drawableEnd="@drawable/ic_remove_eye"
            android:inputType="textPassword" />

    </android.support.design.widget.TextInputLayout>

Dodano w XML android:inputType="textPassword"

TextInputLayout inputPassword = findViewById(R.id.input_password);
EditText password = findViewById(R.id.password);
EditText userName = findViewById(R.id.user_name);
// Get the typeface of user name or other edit text
Typeface typeface = userName.getTypeface();
if (typeface != null)
   inputLayout.setTypeface(typeface); // set to password text input layout

W powyższym kodzie java

Zdobyłem niestandardowy krój pisma od nazwy użytkownika EditTexti zastosowałem go TextInputLayoutw polu hasła. Teraz nie musisz jawnie ustawiać kroju pisma na hasło, EditTextponieważ będzie ono nabywało TextInputLayoutwłaściwość.

Usunąłem również password.setTransformationMethod(new PasswordTransformationMethod());

W ten sposób passwordToggleEnableddziała, niestandardowa czcionka jest również stosowana i do widzenia do awarii. Mam nadzieję, że ten problem zostanie naprawiony w nadchodzących wersjach pomocy technicznej.


2

Możesz także użyć niestandardowego widgetu. To bardzo proste i nie zaśmieca kodu aktywności / fragmentu.

Oto kod:

public class PasswordEditText extends EditText {

  public PasswordEditText(Context context) {
    super(context);
    init();
  }

  public PasswordEditText(Context context, AttributeSet attrs) {
    super(context, attrs);
    init();

  }

  public PasswordEditText(Context context, AttributeSet attrs, int defStyle) {
    super(context, attrs, defStyle);
    init();
  }

  private void init() {
    setTypeface(Typeface.DEFAULT);
  }
}

Twój XML będzie wyglądał następująco:

<com.sample.PasswordEditText
  android:id="@+id/password_edit_field"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:hint="Password"
  android:inputType="textPassword"
  android:password="true" />

Z mojego doświadczenia wynika, że ​​to nie działa - wewnętrznie TextViewwydaje się, że zastępuje niestandardowy krój pisma po wywołaniu konstruktora. Zapewniono obejście w innej odpowiedzi.
Cory Petosky

2

użyj biblioteki kaligrafii .

to nadal nie będzie aktualizować pól haseł za pomocą właściwej czcionki. więc zrób to w kodzie innym niż xml:

Typeface typeface_temp = editText.getTypeface();
editText.setInputType(inputType); /*whatever inputType you want like "TYPE_TEXT_FLAG_NO_SUGGESTIONS"*/
//font is now messed up ..set it back with the below call
editText.setTypeface(typeface_temp); 

0

Ostatnio dodałem możliwość zmiany włączania / wyłączania monospace do rozszerzenia EditText specjalnie dla haseł, które mogą pomóc niektórym osobom. Nie używa, android:fontFamilywięc jest kompatybilny <16.


0

Możesz także użyć

<android.support.design.widget.TextInputLayout/>

razem z

<android.support.v7.widget.AppCompatEditText/>

0

Używam tego rozwiązania do przełączania kroju pisma w zależności od widoczności podpowiedzi. Jest podobny do odpowiedzi Joe, ale zamiast tego rozszerza EditText:

public class PasswordEditText extends android.support.v7.widget.AppCompatEditText {

    public PasswordEditText(Context context) {
        super(context);
    }

    public PasswordEditText(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public PasswordEditText(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    @Override
    protected void onTextChanged(CharSequence text, int start, int lengthBefore, int lengthAfter) {
        super.onTextChanged(text, start, lengthBefore, lengthAfter);
        if (text.length() > 0) setTypeface(Typeface.MONOSPACE);
        else setTypeface(Typeface.DEFAULT);
    }

}

0

Jeśli używasz biblioteki kaligrafii w połączeniu z TextInputLayout i EditText, poniższy kod działa dobrze.

    EditText password = (EditText) findViewById(R.id.password);
    TextInputLayout passwordLayout = (TextInputLayout) findViewById(R.id.passwordLayout);

    Typeface typeface_temp = password.getTypeface();
    password.setInputType(InputType.TYPE_CLASS_TEXT |
            InputType.TYPE_TEXT_VARIATION_PASSWORD); 

    password.setTypeface(typeface_temp);
    passwordLayout.setTypeface(typeface_temp);

Nie zmieniło to mojego kroju podpowiedzi
Rafael Ruiz Muñoz

0

Dziwny przypadek, ale eksperymentowałem z tym i odkryłem, że:

password.setInputType(InputType.TYPE_TEXT_VARIATION_PASSWORD);
password.setTransformationMethod(new PasswordTransformationMethod());

zmieniłem rozmiar czcionki podpowiedzi zamiast samej czcionki! Jest to nadal niepożądany efekt. O dziwo, operacja odwrotna:

password.setTransformationMethod(new PasswordTransformationMethod());
password.setInputType(InputType.TYPE_TEXT_VARIATION_PASSWORD);

Zachowuje ten sam rozmiar czcionki.


0

Znalazłem pewne rozwiązanie tego problemu

Najlepszy sposób na przywitanie. Znalazłem pewne rozwiązanie tego problemu

Najlepszym sposobem jest utworzenie niestandardowego editText i zapisanie wartości kroju pisma jako temp, a następnie zastosowanie metody do zmian InputType. Wreszcie cofamy wartość typu temp face do editText. tak:

public class AppCompatPasswordEditText extends AppCompatEditText {


    public AppCompatPasswordEditText(Context context) {
        super(context);
    }

    public AppCompatPasswordEditText(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public AppCompatPasswordEditText(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }


    @Override
    protected void onAttachedToWindow() {
        super.onAttachedToWindow();
        // Our fonts aren't present in developer tools, like live UI
        // preview in AndroidStudio.
        Typeface cache = getTypeface();

        if (!isInEditMode() && cache != null) {
            setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD);
            setTypeface(cache);
        }
    }

}

-1

W ten sposób można wprowadzić hasło, które zawiera podpowiedź, która nie została przekonwertowana na * i domyślny krój czcionki !!

W XML:

android:inputType="textPassword"
android:gravity="center"
android:ellipsize="start"
android:hint="Input Password !."

Aktywność:

inputPassword.setTypeface(Typeface.DEFAULT);

podziękowania dla: mango i rjrjr za wgląd: D.


-2

jak wyżej, ale upewnij się, że pola nie mają pogrubionego stylu w xml, ponieważ nigdy nie będą wyglądać tak samo, nawet z powyższą poprawką!


2
Nie mów „powyżej” ... rzeczy zmieniają się w czasie :-)
ZaBlanc
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.