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" />
android
fonts
passwords
android-edittext
hpique
źródło
źródło
Odpowiedzi:
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: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: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!
źródło
password.setTransformationMethod(new PasswordTransformationMethod());
konieczne? Wygląda na to, że działa dobrze dla mnie bez.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 ztextPassword
zachowaniem domyślnym . Aby uzyskać bardziej kompletne rozwiązanie, zobacz klasę pomocników pod adresem: stackoverflow.com/a/17582092/231078inputType="textPassword"
Znalazłem tę przydatną wskazówkę z Przewodnika po oknach dialogowych
Na przykład
źródło
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:
W moim
Activity
:źródło
Podejście setTransformationMethod łamie Androida: imeOption dla mnie i umożliwia wpisywanie zwrotów karetki w polu hasła. Zamiast tego robię to:
I nie ustawiam Androida: hasło = „prawda” w XML.
źródło
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
textPassword
typ wprowadzania, ale także 2) pozwalał, aby tekst podpowiedzi pojawiał się w domyślnej (innej niż spacje) czcionce, musisz miećTextWatcher
pole, które może przełączać czcionka poprawnie tam iz powrotem pomiędzyTypeface.DEFAULT
iTypeface.MONOSPACE
na podstawie tego, czy jest pusta, czy nie. Stworzyłem klasę pomocnika, której można użyć do osiągnięcia tego: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!):źródło
EditText
(np. Tekst podpowiedzi Roboto Light), ustawienieTypeface.DEFAULT
później zastąpi to. Dzwonięfield.getTypeface()
z przodu i używam tego kroju pisma, ilekroć muszę później zresetować czcionkę „domyślną”.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.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
Jeśli użyję
android:inputType="textPassword"
, ten problem się nie zdarzyCoś, co próbowałem
1) Użyj
setTransformationMethod
zamiast tegoinputType
2) Użyj
Typeface.DEFAULT
sans-serif-light
jest domyślną czcionką dla wszystkichView
w mojej aplikacji => posetTypeface(Typeface.DEFAULT)
tymEditText
czcionka nadal wygląda inaczej na niektórych urządzeniach3) Użyj
android:fontFamily="sans-serif"
MOJE ROZWIĄZANIE
Testowanie
Problem z czcionkami na urządzeniu
Niektóre urządzenia nie mają problemów z czcionkami
źródło
setTransformationMethod
metodę (gdzie nie napotkałem problemu).setTransformationMethod
bę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 problemInne odpowiedzi są właściwym rozwiązaniem dla większości przypadków.
Jeśli jednak używasz niestandardowej
EditText
podklasy 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ą ustawiszinputType="textPassword"
.W takim przypadku przenieś styl na
onAttachedToWindow
po zakończeniusuper.onAttachedToWindow
rozmowy.Przykładowa implementacja:
źródło
Wiem, że to może być starszy, ale wpadłem na coś związanego z tym problemem, kiedy korzystałem
InputType
iapp:passwordToggleEnabled="true"
razem.Pisząc to, może to komuś pomóc.
Chcę użyć niestandardowej czcionki do pola hasła wraz z
app:passwordToggleEnabled
opcją 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,
Powyższy kod nie został
inputType
zdefiniowany w XMLA w Javie
setTransformationMethod
pomoże mi zdobyć właściwościtextPassword
typu 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.
To się zawiesiło z powodu klasy
onRestoreInstanceState
wewnętrznejTextInputLayout
.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,
Dodano w XML
android:inputType="textPassword"
W powyższym kodzie java
Zdobyłem niestandardowy krój pisma od nazwy użytkownika
EditText
i zastosowałem goTextInputLayout
w polu hasła. Teraz nie musisz jawnie ustawiać kroju pisma na hasło,EditText
ponieważ będzie ono nabywałoTextInputLayout
właściwość.Usunąłem również
password.setTransformationMethod(new PasswordTransformationMethod());
W ten sposób
passwordToggleEnabled
dział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.źródło
Możesz także użyć niestandardowego widgetu. To bardzo proste i nie zaśmieca kodu aktywności / fragmentu.
Oto kod:
Twój XML będzie wyglądał następująco:
źródło
TextView
wydaje się, że zastępuje niestandardowy krój pisma po wywołaniu konstruktora. Zapewniono obejście w innej odpowiedzi.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:
źródło
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:fontFamily
więc jest kompatybilny <16.źródło
Możesz także użyć
razem z
źródło
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:
źródło
Jeśli używasz biblioteki kaligrafii w połączeniu z TextInputLayout i EditText, poniższy kod działa dobrze.
źródło
Dziwny przypadek, ale eksperymentowałem z tym i odkryłem, że:
zmieniłem rozmiar czcionki podpowiedzi zamiast samej czcionki! Jest to nadal niepożądany efekt. O dziwo, operacja odwrotna:
Zachowuje ten sam rozmiar czcionki.
źródło
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:
źródło
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:
Aktywność:
podziękowania dla: mango i rjrjr za wgląd: D.
źródło
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ą!
źródło