You need to add a TextChangedListener to your EditText , and then apply an InputFilter to see the following code.
edDesc.addTextChangedListener(new TextWatcher() { @Override public void onTextChanged(CharSequence s, int start, int before, int count) {} @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { int wordsLength = countWords(s.toString());// words.length; // count == 0 means a new word is going to start if (count == 0 && wordsLength >= MAX_WORDS) { setCharLimit(edDesc, edDesc.getText().length()); } else { removeFilter(edDesc); } tvWordCount.setText(String.valueOf(wordsLength) + "/" + MAX_WORDS); } @Override public void afterTextChanged(Editable s) {} }); private int countWords(String s) { String trim = s.trim(); if (trim.isEmpty()) return 0; return trim.split("\\s+").length; // separate string around spaces } private InputFilter filter; private void setCharLimit(EditText et, int max) { filter = new InputFilter.LengthFilter(max); et.setFilters(new InputFilter[] { filter }); } private void removeFilter(EditText et) { if (filter != null) { et.setFilters(new InputFilter[0]); filter = null; } }
You need to catch the Paste event so that the user cannot insert more than the required words. You can intercept Android EditText Insert an event [read more]
source share