In my project I have an EditText
. I want to count the characters in the EditText
, and show that number it in a TextView
. I have written the following code and it works fine. However, my problem is when I click Backspace it counts up, but I need to decrement the number. How can I consider 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){}
});
Use
The following was once suggested in one of the answers, but its very inefficient
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.
The listener needs a
TextWatcher
, which requires three methods to be overridden:beforeTextChanged
,onTextChanged
, andafterTextChanged
.Counting the characters
You can get the character count in
onTextChanged
orbeforeTextChanged
withor in
afterTextChanged
withMeaning 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 thencount
will be0
.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 theeditable
inafterTextChanged
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 ascount
inbeforeTextChanged
.count
: This is the length of text that was inserted. This is the same value asafter
inbeforeTextChanged
.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 theEditText
. 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
how about just getting the length of char in your EditText and display it?
something along the line of
little few change in your code :