This is a slightly more general answer with more explanation for future viewers.
Add a text changed listener
If you want to find the text length or do something else after the text has been changed, you can add a text changed listener to your edit text.
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) {
}
});
The listener needs a TextWatcher
, which requires three methods to be overridden: beforeTextChanged
, onTextChanged
, and afterTextChanged
.
Counting the characters
You can get the character count in onTextChanged
or beforeTextChanged
with
charSequence.length()
or in afterTextChanged
with
editable.length()
Meaning of the methods
The parameters are a little confusing so here is a little extra explanation.
beforeTextChanged
beforeTextChanged(CharSequence charSequence, int start, int count, int after)
charSequence
: This is the text content before the pending change is made. You should not try to change it.
start
: This is the index of where the new text will be inserted. If a range is selected, then it is the beginning index of the range.
count
: This is the length of selected text that is going to be replaced. If nothing is selected then count
will be 0
.
after
: this is the length of the text to be inserted.
onTextChanged
onTextChanged(CharSequence charSequence, int start, int before, int count)
charSequence
: This is the text content after the change was made. You should not try to modify this value here. Modify the editable
in afterTextChanged
if you need to.
start
: This is the index of the start of where the new text was inserted.
before
: This is the old value. It is the length of previously selected text that was replaced. This is the same value as count
in beforeTextChanged
.
count
: This is the length of text that was inserted. This is the same value as after
in beforeTextChanged
.
afterTextChanged
afterTextChanged(Editable editable)
Like onTextChanged
, this is called after the change has already been made. However, now the text may be modified.
editable
: This is the editable text of the EditText
. If you change it, though, you have to be careful not to get into an infinite loop. See the documentation for more details.
Supplemental image from this answer
