В моем проекте у меня есть 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){}
});
Ответы:
использование
В одном из ответов однажды было предложено следующее, но оно очень неэффективно
источник
Как насчет того, чтобы просто получить длину символа в вашем EditText и отобразить его?
что-то по линии
источник
textMessage.length()
, не нужно делатьgetText().toString()
. developer.android.com/reference/android/widget/...мало что изменилось в вашем коде:
источник
Это немного более общий ответ с большим количеством объяснений для будущих зрителей.
Добавить текст измененного слушателя
Если вы хотите узнать длину текста или сделать что-то еще после того, как текст был изменен, вы можете добавить прослушивателя измененного текста к вашему тексту редактирования.
Слушатель нужен
TextWatcher
, который требует три способа быть переопределены:beforeTextChanged
,onTextChanged
иafterTextChanged
.Подсчет персонажей
Вы можете получить количество символов в
onTextChanged
илиbeforeTextChanged
сили в
afterTextChanged
сЗначение методов
Параметры немного сбивают с толку, поэтому здесь есть несколько дополнительных объяснений.
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
Это текстовое содержимое после внесения изменений. Вы не должны пытаться изменить это значение здесь. Изменитьeditable
вafterTextChanged
если вам нужно.start
: Это индекс начала, где был вставлен новый текст.before
Это старая ценность. Это длина ранее выбранного текста, который был заменен. Это то же значение, что иcount
вbeforeTextChanged
.count
: Это длина текста, который был вставлен. Это то же значение, что иafter
вbeforeTextChanged
.afterTextChanged
afterTextChanged(Editable editable)
Мол
onTextChanged
, это вызывается после того, как изменение уже сделано. Однако теперь текст может быть изменен.editable
: Это редактируемый текстEditText
. Если вы измените его, вы должны быть осторожны, чтобы не попасть в бесконечный цикл. Смотрите документацию для более подробной информации.Дополнительное изображение из этого ответа
источник
TextWatcher maritalStatusTextWatcher = new TextWatcher () {@Override public void beforeTextChanged (CharSequence charSequence, int i, int i1, int i2) {
источник