Подсчет символов в 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){}
});
653   4  

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: это текстовое содержимое после внесения изменений. Вы не должны пытаться изменить это значение здесь. Измените тег editable in afterTextChanged если вам нужно.
  • start: это индекс начала, в которое был вставлен новый текст.
  • before: это старое значение. Это длина ранее выделенного текста, который был заменен. Этот это то же значение, что и count на beforeTextChanged.
  • count: это длина текста, который был вставлен. Это то же самое значение, что и after на beforeTextChanged.

afterTextChanged

afterTextChanged(Editable editable)

как onTextChanged, это называется После того, как изменение уже было сделано. Однако, теперь текст может быть изменен.

  • editable: это редактируемый текст EditText. Если вы измените его, хотя, вы должны быть осторожны, чтобы не попасть в бесконечный цикл. Смотрите документация для более подробной информации.

дополнительные изображения ответ

enter image description here

Comments

    Ничего не найдено.