How to set maximum word limit on Android EditText
I know how to set character limit but I am looking for Word Limit.
Android How to set maximum "word" limit on EditText
Asked Answered
You need to add a TextChangedListener
to your EditText
then apply an InputFilter
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 have to intercept Paste event so that user shouldn't be able to paste more than required words. You can intercept Android EditText
Paste event [read more]
still you need to see for paste event :) –
Godsend
it fails when i have typed n words but want to change characters of an existing word. it won't let me type because of character limit filter –
Beaudette
this won't work for the last word, as soon as you add a character the editor won't let you add more characters –
Whimwham
I have made Extension function for the EditText and it works perfectly
fun EditText.addWordCounter(func: (wordCount: Int?) -> Unit) {
addTextChangedListener(object :TextWatcher{
override fun afterTextChanged(s: Editable?) {}
override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {}
override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {
val trim = s?.trim()
val wordCount = if (trim?.isEmpty()!!or(false)) 0 else trim.split("\\s+".toRegex()).dropLastWhile { it.isEmpty() }.toTypedArray().size
func(wordCount)
}
})}
then use like
etDesc.addWordCounter { wordCount ->
Log.d(TAG, "addWordCounter: $wordCount")
}
binding.etSectionDesc.doAfterTextChanged { val count = binding.etSectionDesc.content().wordCount()
if (count >= ValidationConst.MAX_COURSE_DESC_LENGTH_SHOW) {
setCharLimit(binding.etSectionDesc, binding.etSectionDesc.content().length)
} else {
removeFilter(binding.etSectionDesc)
}
binding.tvDescTotalChar.apply {
text = count.toString()
if (count < ValidationConst.MAX_COURSE_DESC_LENGTH_SHOW) {
setTextColor(ContextCompat.getColor(context, R.color.black))
} else {
setTextColor(context.getAttrResource(R.attr.accentColor_Red))
}
}
}
You can Limit the words to type in EditText.
Simply, add this
android:maxLength="10"
Full code:
<EditText
android:id="@+id/uname"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="textPersonName"
android:maxLength="10"/>
Official Documentation here
Happy Coding :)
That sets the maximum number of characters, not words –
Turco
© 2022 - 2024 — McMap. All rights reserved.