Liczenie znaków w EditText zmieniło słuchacza
W moim projekcie mam EditText
. Chcę policzyć znaki w EditText
i pokazać tę liczbę w TextView
. Napisałem następujący kod i działa dobrze. Jednak mój problem polega na tym, że gdy klikam Backspace liczy się, ale muszę zmniejszyć liczbę. Jak mogę rozważyć Backspace ?
tv = (TextView)findViewById(R.id.charCounts);
textMessage = (EditText)findViewById(R.id.textMessage);
textMessage.addTextChangedListener(new TextWatcher(){
public void afterTextChanged(Editable s) {
i++;
tv.setText(String.valueOf(i) + " / " + String.valueOf(charCounts));
}
public void beforeTextChanged(CharSequence s, int start, int count, int after){}
public void onTextChanged(CharSequence s, int start, int before, int count){}
});
4 answers
Użyj
s.length()
Następujące zostało kiedyś zasugerowane w jednej z odpowiedzi, ale jest bardzo nieefektywne
textMessage.getText().toString().length()
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-12-19 16:19:19
Może po prostu pobranie długości znaku w edytorze i wyświetlenie go?
Coś wzdłuż linii
tv.setText(s.length() + " / " + String.valueOf(charCounts));
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-04-02 09:04:52
Małe zmiany w kodzie:
TextView tv = (TextView)findViewById(R.id.charCounts);
textMessage = (EditText)findViewById(R.id.textMessage);
textMessage.addTextChangedListener(new TextWatcher(){
public void afterTextChanged(Editable s) {
tv.setText(String.valueOf(s.toString().length()));
}
public void beforeTextChanged(CharSequence s, int start, int count, int after){}
public void onTextChanged(CharSequence s, int start, int before, int count){}
});
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-06-14 19:15:53
Jest to nieco bardziej ogólna odpowiedź z więcej wyjaśnień dla przyszłych widzów.
Dodaj tekst zmieniony słuchacz
Jeśli chcesz znaleźć długość tekstu lub zrobić coś innego po zmianie tekstu, możesz dodać tekst zmieniony słuchaczem do edycji tekstu.
EditText editText = (EditText) findViewById(R.id.testEditText);
editText.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence charSequence, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence charSequence, int start, int before, int count) {
}
@Override
public void afterTextChanged(Editable editable) {
}
});
Słuchacz potrzebuje TextWatcher
, która wymaga nadpisania trzech metod: beforeTextChanged
, onTextChanged
, i afterTextChanged
.
Liczenie znaków
Można uzyskać postać policz w onTextChanged
lub beforeTextChanged
z
charSequence.length()
Lub w afterTextChanged
z
editable.length()
Znaczenie metod
Parametry są trochę mylące, więc tutaj jest trochę dodatkowe wyjaśnienie.
BeforeTextChanged
beforeTextChanged(CharSequence charSequence, int start, int count, int after)
-
charSequence
: jest to zawartość tekstowa przed dokonaniem oczekującej zmiany. Nie powinieneś próbować tego zmieniać. -
start
: jest to indeks miejsca, w którym zostanie wstawiony nowy tekst. Jeśli zaznaczony jest zakres, to jest indeksem początku zakresu. -
count
: jest to długość zaznaczonego tekstu, który ma zostać zastąpiony. Jeśli nic nie jest zaznaczone, to {[13] } będzie0
. -
after
: jest to długość tekstu do wstawienia.
OnTextChanged
onTextChanged(CharSequence charSequence, int start, int before, int count)
-
charSequence
: jest to zawartość tekstowa po wprowadzeniu zmiany. Nie należy próbować modyfikować tej wartości tutaj. Zmodyfikujeditable
wafterTextChanged
jeśli potrzebujesz za. -
start
: jest to indeks początku, w którym wstawiono nowy tekst. -
before
: to jest stara wartość. Jest to długość wcześniej zaznaczonego tekstu, który został zastąpiony. Jest to ta sama wartość cocount
WbeforeTextChanged
. -
count
: jest to długość tekstu, który został wstawiony. Jest to ta sama wartość coafter
WbeforeTextChanged
.
AfterTextChanged
afterTextChanged(Editable editable)
Podobnie jak onTextChanged
, nazywa się to po zmianie już made. Jednak teraz tekst może zostać zmodyfikowany.
-
editable
: jest to edytowalny tekstEditText
. Jeśli jednak go zmienisz, musisz uważać, aby nie dostać się do nieskończonej pętli. Więcej informacji można znaleźć w dokumentacji .
Zdjęcie uzupełniające z ta odpowiedź
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-11-29 14:25:04