Подсчет символов в EditText Измененный слушатель - PullRequest
272 голосов
/ 30 ноября 2010

В моем проекте у меня есть 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){}
}); 

Ответы [ 5 ]

142 голосов
/ 30 ноября 2010

Использование

s.length()

В одном из ответов однажды было предложено следующее, но оно очень неэффективно

textMessage.getText().toString().length()
38 голосов
/ 30 ноября 2010

как насчет получения длины символа в вашем EditText и его отображения?

что-то вроде

tv.setText(s.length() + " / " + String.valueOf(charCounts));
27 голосов
/ 07 апреля 2014

мало изменений в вашем коде:

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){}
}); 
5 голосов
/ 07 ноября 2016

Это более общий ответ с дополнительными пояснениями для будущих зрителей.

Добавить текст измененного слушателя

Если вы хотите узнать длину текста или сделать что-то еще после того, как текст был изменен, вы можете добавить прослушивателя измененного текста к вашему тексту редактирования.

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

afterTextChanged

afterTextChanged(Editable editable)

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

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

Дополнительное изображение от этот ответ

enter image description here

0 голосов
/ 23 января 2019

TextWatcher maritalStatusTextWatcher = new TextWatcher () {@Override public void beforeTextChanged (CharSequence charSequence, int i, int i1, int i2) {

    }

    @Override
    public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
        try {
            if (charSequence.length()==0){
                topMaritalStatus.setVisibility(View.GONE);
            }else{
                topMaritalStatus.setVisibility(View.VISIBLE);
            }
        }catch (Exception e){
            e.printStackTrace();
        }
    }

    @Override
    public void afterTextChanged(Editable editable) {

    }
};
...