Jaki jest najlepszy sposób ograniczenia długości tekstu EditText
w Androidzie?
Czy jest na to sposób za pomocą xml?
android
android-edittext
maxlength
hpique
źródło
źródło
Odpowiedzi:
Dokumentacja
Przykład
źródło
maxLength
Nieruchomość nadal działa.android:maxLength
jest to równoważne z tymInputFilter.LengthFilter
, więc programowo zmieniając filtr, zmodyfikowałeś również jego filtr XML.setFilters
przestanieandroid:maxLength
działać, ponieważ zastąpi zestaw filtrów ustawiony przez XML. Innymi słowy, jeśli ustawisz dowolne filtry programowo, musisz ustawić je wszystkie programowo.użyj filtra wejściowego, aby ograniczyć maksymalną długość widoku tekstu.
źródło
InputFilter
. Zastępujeandroid:maxlength
w pliku xml, więc musimy dodać wLengthFilter
ten sposób.źródło
TextWatcher
.Uwaga dla osób, które już korzystają z niestandardowego filtra wejściowego i chcą również ograniczyć maksymalną długość:
Po przypisaniu filtrów wejściowych w kodzie wszystkie wcześniej ustawione filtry wejściowe są kasowane, w tym jeden zestaw z
android:maxLength
. Przekonałem się o tym, próbując użyć niestandardowego filtra wejściowego, aby zapobiec użyciu niektórych znaków, które nie są dozwolone w polu hasła. Po ustawieniu tego filtra za pomocą setFilters nie obserwowano już maxLength. Rozwiązaniem było programowe ustawienie maxLength i mojego niestandardowego filtra. Coś takiego:źródło
źródło
Miałem ten problem i uważam, że brakuje nam dobrze wyjaśnionego sposobu robienia tego programowo bez utraty ustawionych filtrów.
Ustawianie długości w XML:
Zgodnie z prawidłową odpowiedzią, jeśli chcesz zdefiniować stałą długość w EditText, którego nie będziesz dalej zmieniać w przyszłości, po prostu zdefiniuj w EditText XML:
Programowe ustawianie długości
Aby programowo ustawić długość, musisz ustawić ją za pomocą
InputFilter
. Ale jeśli utworzysz nowy InputFilter i ustawisz goEditText
, stracisz wszystkie inne już zdefiniowane filtry (np. MaxLines, inputType itp.), Które mogłeś dodać albo przez XML, albo programowo.To jest NIEPRAWIDŁOWE :
Aby uniknąć utraty wcześniej dodanych filtrów, musisz uzyskać te filtry, dodać nowy (w tym przypadku maxLength) i ustawić filtry z powrotem na
EditText
następujące:Jawa
Kotlin jednak ułatwił wszystkim, musisz również dodać filtr do już istniejących, ale możesz to zrobić za pomocą prostego:
źródło
Dla każdego, kto zastanawia się, jak to osiągnąć, oto moja rozszerzona
EditText
klasaEditTextNumeric
..setMaxLength(int)
- ustawia maksymalną liczbę cyfr.setMaxValue(int)
- ograniczenie maksymalnej wartości całkowitej.setMin(int)
- ograniczenie minimalnej wartości całkowitej.getValue()
- uzyskać wartość całkowitąPrzykładowe użycie:
EditText
Oczywiście wszystkie inne metody i atrybuty, które mają zastosowanie , również działają.źródło
Ze względu na obserwację goto10, zestawiłem następujący kod, aby zabezpieczyć się przed utratą innych filtrów z ustawieniem maksymalnej długości:
źródło
źródło
Xml
Jawa:
Kotlin:
źródło
Innym sposobem na osiągnięcie tego jest dodanie do pliku XML następującej definicji:
Ograniczy to maksymalną długość
EditText
widgetu do 6 znaków.źródło
Z material.io możesz używać w
TextInputEditText
połączeniu zTextInputLayout
:Możesz skonfigurować hasło EditText z możliwością rysowania:
Lub możesz ograniczyć długość tekstu za pomocą / bez licznika:
Zależność:
źródło
XML
android:maxLength="10"
Programowo:
Uwaga: wewnętrznie EditText i TextView analizują wartość
android:maxLength
w XML i używająInputFilter.LengthFilter()
do jej zastosowania.Zobacz: TextView.java # L1564
źródło
Jest to niestandardowa klasa EditText, która pozwala na stosowanie filtra Length wraz z innymi filtrami. Dzięki odpowiedzi Tima Gallaghera (poniżej)
źródło
prosty sposób w XML:
jeśli musisz ustawić 4 znaki w edytorze tekstu XML, użyj tego
źródło
To działa dobrze ...
android:maxLength="10"
to zaakceptuje tylko
10
postacie.źródło
Wypróbuj programowo dla Java :
źródło
myEditText.setFilters(new InputFilter[] {new InputFilter.LengthFilter(CUSTOM_MAX_LEN)});
Widziałem wiele dobrych rozwiązań, ale chciałbym podać coś, co uważam za bardziej kompletne i przyjazne dla użytkownika rozwiązanie, które obejmuje:
1, Limit długości.
2, Jeśli wprowadzisz więcej, oddzwoń, aby uruchomić toast.
3, Kursor może znajdować się na środku lub ogonie.
4, użytkownik może wprowadzić, wklejając ciąg.
5, Zawsze odrzucaj dane przelewu i zachowaj pochodzenie.
Nie udało mi się, jeśli użytkownik podświetli część bieżącego wejścia i spróbuje wkleić bardzo długi ciąg, nie wiem, jak przywrócić podświetlenie.
Na przykład maksymalna długość jest ustawiona na 10, użytkownik wprowadził „12345678” i oznaczył „345” jako podświetlony, i próbował wkleić ciąg „0000”, który przekroczy ograniczenia.
Kiedy próbuję użyć edit_text.setSelection (start = 2, end = 4) w celu przywrócenia stanu początkowego, wynik jest taki, że po prostu wstawiam 2 spacje jako „12 345 678”, a nie podświetlenie źródła. Chciałbym, żeby ktoś to rozwiązał.
źródło
Możesz użyć
android:maxLength="10"
w EditText. (Tutaj limit wynosi do 10 znaków)źródło
Kotlin:
ZTE Blade A520
ma dziwny efekt. Gdy wpiszesz więcej niż 10 symboli (na przykład 15),EditText
pokazuje pierwsze 10, ale pozostałe 5 nie są widoczne i niedostępne. Ale kiedy usuwasz symbole za pomocąBackspace
, najpierw usuwa właściwe 5 symboli, a następnie usuwa pozostałe 10. Aby obejść to zachowanie, użyj rozwiązania :albo to:
lub to, jeśli chcesz mieć sugestie:
źródło
prosty sposób w XML:
do programowego ustawienia możesz użyć następującej funkcji
źródło