Попробуйте сделать что-то вроде этого.
Это решение может быть более производительным, чем получение CharSequence.length. Каждый раз, когда вы нажимаете на программную клавиатуру, происходит событие; поэтому, если вы сделаете длину, она будет каждый раз считать CharSequence, которая может замедлиться, если вы начнете получать большие значения CharSequnces. Слушатель событий при изменении текста использует счет до и после. Это хорошо работает для значений приращения и уменьшения
@Override
public void beforeTextChanged(CharSequence charSequence, int start, int count, int after) {
int tick = start + after;
if(tick < mMessageMax) {
int remaining = mMessageMax - tick;
((TextView)findViewById(R.id.contact_us_chars)).setText(String.valueOf(remaining));
}
}