Android如何在EditText上设置最大"单词"限制

AZ_*_*AZ_ 6 android cpu-word limit android-edittext

如何在Android上设置最大字数限制EditText我知道如何设置字符限制但我正在寻找Word限制.

AZ_*_*AZ_ 11

您需要将添加TextChangedListener到您的EditText再申请一个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;
    }
}
Run Code Online (Sandbox Code Playgroud)

您必须拦截粘贴事件,以便用户不能粘贴超过所需的单词.你可以拦截Android EditTextPaste事件[了解更多]