Android如何设置最大值;字;编辑文本的限制

Android如何设置最大值;字;编辑文本的限制,android,android-edittext,limit,word,Android,Android Edittext,Limit,Word,如何在Android上设置最大字数限制EditText我知道如何设置字符限制,但我正在寻找字数限制您需要在EditText中添加TextChangedListener,然后应用InputFilter查看以下代码 edDesc.addTextChangedListener(new TextWatcher() { @Override public void onTextChanged(CharSequence s, int start, int before, int count)

如何在Android上设置最大字数限制
EditText
我知道如何设置字符限制,但我正在寻找字数限制您需要在
EditText
中添加
TextChangedListener
,然后应用
InputFilter
查看以下代码

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;
    }
}

您必须截获粘贴事件,以便用户不能粘贴超过所需的单词。您可以拦截Android
EditText
粘贴事件

您可以限制在EditText中键入的单词

简单地说,加上这个

android:maxLength="10"
完整代码:

 <EditText
        android:id="@+id/uname"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:inputType="textPersonName"
        android:maxLength="10"/>

官方文件


快乐编码:)

我为EditText做了扩展功能,它工作得非常完美

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)
    }
})}
然后使用like

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

您仍然需要查看粘贴事件:)当我输入了n个单词但想要更改现有单词的字符时,它会失败。它不允许我输入,因为字符限制过滤器设置了最大字符数,而不是单词数