2015-03-03 212 views

回答

8

您需要将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; 
    } 
} 

您必须拦截粘贴事件,以便用户不应该粘贴超过所需的字数。您可以拦截Android EditText粘贴事件[read more]

+0

仍需要看到粘贴事件:) – 2015-03-03 04:14:42

-2

您可以限制单词在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"/> 

官方文档here

编码快乐:)

+0

这设置了字符的最大数量,而不是单词 – CACuzcatlan 2017-03-21 23:06:02

相关问题