Intereting Posts
Выделите пользовательский элемент списка при длительном нажатии Android-приложение несовместимо с Samsung Galaxy S4 Android в покупке приложения: проверка подписи не выполнена Android очистить поток веб-просмотра, свободной памяти, избежать OutOfMemoryError Не удается разрешить символ c882c94be45fff9d16a1cf845fc16ec5 Как изменить цвет шрифта Spinner? Как переопределить шифрованный список, отправленный на сервер Android при использовании HttpsURLConnection? Как изменить размер пользовательского представления программно? Просмотр анимации справа налево Платформа Cordova добавляет ошибку android Шифрование AES в iOS и Android и дешифрование в C # .NET Является ли идентификатор устройства Android Android когда-либо измененным? Установите марку в стиле и примените этот стиль к TextView программно Java Temporary Iterators замедляет мою Android-игру PhoneGap 1.4 упаковка Sencha Touch 2.X – Как насчет производительности?

Подсчет голосов в EditText Changed Listener

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

Solutions Collecting From Web of "Подсчет голосов в EditText Changed Listener"

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

 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 : это текстовое содержимое до charSequence ожидающего изменения. Вы не должны пытаться изменить его.
  • start : Это индекс, в который будет вставлен новый текст. Если выбран диапазон, то это начальный индекс диапазона.
  • count : Это длина выделенного текста, который будет заменен. Если ничего не выбрано, тогда count будет равен 0 .
  • after : это длина текста, который нужно вставить.

OnTextChanged

onTextChanged(CharSequence charSequence, int start, int before, int count)

  • charSequence : это текстовое содержимое после charSequence изменений. Вы не должны пытаться изменить это значение здесь. Измените editable в afterTextChanged если вам нужно.
  • start : Это индекс начала ввода нового текста.
  • before : Это старое значение. Это длина ранее выбранного текста, который был заменен. Это то же значение, что и count beforeTextChanged .
  • count : Это длина текста, который был вставлен. Это то же значение, что и в beforeTextChanged .

afterTextChanged

afterTextChanged(Editable editable)

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

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