Android How to set maximum “word” limit on EditText

假装没事ソ 提交于 2019-12-10 13:17:43

问题


How to set maximum word limit on Android EditText I know how to set character limit but I am looking for Word Limit.


回答1:


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]




回答2:


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().orFalse()) 0 else trim?.split("\\s+".toRegex())?.dropLastWhile { it.isEmpty() }?.toTypedArray()?.size
        func(wordCount)
    }
})}

then use like

etDesc.addWordCounter { wordCount ->
        Log.d(TAG, "addWordCounter: $wordCount")
    }



回答3:


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 :)



来源:https://stackoverflow.com/questions/28823898/android-how-to-set-maximum-word-limit-on-edittext

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!