Potrzebuję pliku, EditText
który wygląda następująco: onError:
Zamiast tego wywołanie onError wygląda tak:
Uwaga: aplikacja działa na SDK 19 (4.4.2)
min SDK to 1
Czy istnieje metoda podobna do setError, która robi to automatycznie, czy też muszę napisać do niej kod?
Dziękuję Ci
EditText
. Bardziej prawdopodobne jest, że będziesz potrzebować czegoś, co zawijaEditText
lub w inny sposób do niego dodaje. Zobacz github.com/rengwuxian/MaterialEditText .Odpowiedzi:
Nie ma potrzeby korzystania z biblioteki innej firmy, ponieważ Google wprowadził
TextInputLayout
jako częśćdesign-support-library
.Idąc za podstawowym przykładem:
Układ
Uwaga: ustawienie
app:errorEnabled="true"
jako atrybutuTextInputLayout
nie spowoduje zmiany rozmiaru po wyświetleniu błędu - więc w zasadzie blokuje spację.Kod
W celu wykazania błędów poniżej
EditText
wystarczy wezwanie#setError
naTextInputLayout
(nie na dzieckoEditText
):Wynik
Aby ukryć błąd i zresetować odcień, po prostu zadzwoń
til.setError(null)
.Uwaga
Aby z niego skorzystać
TextInputLayout
, musisz dodać do swoichbuild.gradle
zależności:Ustawianie koloru niestandardowego
Domyślnie linia
EditText
będzie czerwona. Jeśli chcesz wyświetlić inny kolor, możesz użyć następującego kodu, gdy tylko zadzwoniszsetError
.Aby to wyczyścić, po prostu wywołaj
clearColorFilter
funkcję, na przykład:źródło
textInputLayout.setError("Error messsage")
kolorEditText
powinien zmienić się na czerwony. Aby go zresetować, wystarczy zadzwonićtextInputLayout.setError(null)
.editText.getBackground().setColorFilter(getResources().getColor(R.color.red_500_primary), PorterDuff.Mode.SRC_ATOP);
nie jest już potrzebny z najnowszą biblioteką wsparciaEditText
, nieTextInputLayout
. Widziałem tę odpowiedź i nadal nie mogłem wymyślić, co muszę zmienić. Bardzo łatwa rzecz do przeoczenia.Zadzwoń
myTextInputLayout.setError()
zamiastmyEditText.setError()
.Te kontenery i zabezpieczenia mają podwójną funkcjonalność przy ustawianiu błędów. Funkcjonalność, której potrzebujesz, to funkcja kontenera. Ale do tego możesz potrzebować minimalnej wersji 23.
źródło
Twój
EditText
powinien być zapakowany wTextInputLayout
Aby otrzymać komunikat o błędzie, taki jak chcesz, ustaw błąd na
TextInputLayout
Należy dodać zależność biblioteki obsługi projektu. Dodaj tę linię do swoich zależności gradle
źródło
Odpowiedź reVerse jest świetna, ale nie wskazała, jak usunąć pływającą etykietkę błędu
Musisz
edittext.setError(null)
to usunąć.Poza tym, jak ktoś zauważył, nie potrzebujesz
TextInputLayout.setErrorEnabled(true)
Układ
Kod
źródło
źródło
Jeśli ktoś nadal napotyka błąd podczas korzystania z biblioteki projektów Google, jak wspomniano w odpowiedzi, użyj tego jako komentarza @h_k, który jest -
Zamiast wywoływać setError w TextInputLayout , możesz używać setError w samym EditText .
źródło
źródło