Подсчет символов в EditText изменен слушатель
в моем проекте у меня есть EditText. Я хочу посчитать символы в EditText, и показать, что число его в TextView. Я написал следующий код и он работает нормально. Однако моя проблема заключается в том, когда я нажимаю Backspace он подсчитывает, но мне нужно уменьшить количество. Как я могу считать 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 ответов:
использовать
s.length()следующий раз было предложено в одном из ответов, но его очень неэффективной
textMessage.getText().toString().length()
Как насчет того, чтобы просто получить длину символа в вашем EditText и отобразить его?
что-то вдоль линии
tv.setText(s.length() + " / " + String.valueOf(charCounts));
немного изменений в вашем коде:
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){} });
это немного более общий ответ с объяснением будущих зрителей.
добавить текст изменен слушателя
если вы хотите найти длину текста или сделать что-то еще после того, как текст был изменен, вы можете добавить текст изменен слушателя для редактирования текста.
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) { } });слушатель нуждается в
TextWatcher, что требует переопределения трех методов:beforeTextChanged,onTextChangedиafterTextChanged.подсчет персонажи
вы можете получить количество символов в
onTextChangedилиbeforeTextChangedСcharSequence.length()или
afterTextChangedСeditable.length()значение методов
параметры немного сбивают с толку, так что вот немного дополнительное объяснение.
beforeTextChanged
beforeTextChanged(CharSequence charSequence, int start, int count, int after)
charSequence: это текст до ожидаемого изменения. Вы не должны пытаться изменить его.start: это индекс, в который будет вставлен новый текст. Если выбран диапазон, то это начальный индекс диапазона.count: это длина выделенного текста, который будет заменен. Если ничего не выбрано, тоcountбудет0.after: это длина текста, который будет вставлен.onTextChanged
onTextChanged(CharSequence charSequence, int start, int before, int count)
charSequence: это текстовое содержимое после внесения изменений. Вы не должны пытаться изменить это значение здесь. Измените тегeditableinafterTextChangedесли вам нужно.start: это индекс начала, в которое был вставлен новый текст.before: это старое значение. Это длина ранее выделенного текста, который был заменен. Этот это то же значение, что иcountнаbeforeTextChanged.count: это длина текста, который был вставлен. Это то же самое значение, что иafterнаbeforeTextChanged.afterTextChanged
afterTextChanged(Editable editable)как
onTextChanged, это называется После того, как изменение уже было сделано. Однако, теперь текст может быть изменен.
editable: это редактируемый текстEditText. Если вы измените его, хотя, вы должны быть осторожны, чтобы не попасть в бесконечный цикл. Смотрите документация для более подробной информации.дополнительные изображения ответ

Comments