Ответ 1
Использование
s.length()
В одном из ответов было предложено следующее, но его очень неэффективное
textMessage.getText().toString().length()
В моем проекте у меня есть 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){}
});
Использование
s.length()
В одном из ответов было предложено следующее, но его очень неэффективное
textMessage.getText().toString().length()
как просто получить длину char в вашем 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
в 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) {
}
@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) {
}
};