Zastanawiałem się, jaki najlepszy sposób na liczenie znaków w polu edycji na żywo jest w systemie Android. Patrzyłem na to, ale nie mogłem tego zrozumieć.
Aby opisać problem, mam EditText i próbuję ograniczyć liczbę znaków do 150. Mogę to zrobić za pomocą filtru wejściowego, jednak chcę pokazać tuż pod polem tekstowym liczbę znaków, które wprowadził użytkownik (Prawie tak jak przepełnienie stosu robi się teraz).
Gdyby ktoś mógł napisać mały fragment przykładowego kodu lub wskazać mi właściwy kierunek, byłbym bardzo wdzięczny.
Możesz zliczać znaki z samego xml za pomocą opakowania TextInputLayout dla EditText wprowadzonego w SupportLibrary v23.1
Po prostu zawiń EditText za pomocą TextInputLayout i ustaw CounterEnabled na true i ustaw counterMaxLength.
Dostaniesz istotny wpływ jak to
Możesz użyć counterOverflowTextAppearance , counterTextAppearance, aby nadać styl licznikowi.
EDYTOWAĆ
Z dokumentacji Androida.
TextInputEditText klasa jest do stosowania jako dziecko tego układu. Użycie TextInputEditText umożliwia TextInputLayout większą kontrolę nad wizualnymi aspektami dowolnego wprowadzania tekstu. Przykładowe użycie jest następujące:
TextInputLayout TextInputEditText
źródło
Możesz to zrobić za pomocą
TextInputLayout
bibliotek kompatybilnych z:i uzupełnij:
źródło
w xml dodaj ten atrybut do editText
w java dodaj ten odbiornik
źródło
To bardzo proste Postępuj zgodnie z poniższymi instrukcjami:
==== Dodaj je do swoich importów ===
===== Zdefiniuj to =====
========== Inside On Create =====
źródło
źródło
Po prostu ustaw te 2 linie
TextInputLayout
w swoim pliku XML:źródło
To rozwiązanie używa
Kotlin
i pokazuje liczbę pozostałych znaków. Ponadto, jeśli aktualna liczba znaków przekroczy limit 50, kolor tekstu zmieni się na czerwony.Kotlin
Nie zapomnij też dodać
TextWatcher
do swojegoEditText
źródło
Możesz dodać licznik do swojego TextInputEditText, który jest zawijany w TextInputLayout. Jak widać na przykładzie,
counterEnabled
włącza tę funkcję icounterMaxLengh
określa dla niej liczbę znaków.źródło
Spotkałem ten sam problem i wypróbowałem metodę Camerona. Działa, ale jest drobny błąd: jeśli użytkownik użyje kopiuj i wklej, nie policzy znaków. Proponuję więc zrobić po zmianie tekstu, jak poniżej:
źródło
Użyj Androida: maxLength = "140"
To powinno działać. :)
Mam nadzieję, że to pomoże
źródło
Spróbuj zrobić coś takiego.
To rozwiązanie może być bardziej wydajne niż uzyskiwanie CharSequence.length. Za każdym dotknięciem miękkiej klawiatury zdarzenie jest uruchamiane; dlatego jeśli zrobisz długość, za każdym razem policzy CharSequence, co może spowolnić, jeśli zaczniesz wchodzić w duże CharSequnces. Odbiornik zdarzenia przy zmianie tekstu ustawia licznik przed i po. Działa to dobrze w przypadku wartości zwiększania i zmniejszania
źródło
Spróbuj tego
`
źródło
Przejrzysta droga;
źródło