Android EditText禁止输入Emoji后设置android:maxLength失效
但是当我们设置了InputFilter之后可能会出现一个问题,就是当我们在代码中设置 android:maxLength="8"的时候,会发现不起作用了。我们点进去InputFilter,查看其源码我们就会发现,里面还有个自带的LengthFilter。我们就可以通过再添加一个LengthFileter就可以了。
/**
* 禁止EditText输入特殊字符和表情
* @param editText
* @param maxLength 输入框最大输入字符数
*/
public static void setEditTextInhibitInputSpeChat(EditText editText, int maxLength){
InputFilter filter=new InputFilter() {
@Override
public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {
String speChat="[`~!@#$%^&*()+=|{}':;',\\[\\].<>/?~!@#¥%……&*()——+|{}【】‘;:”“’。,、?]|[\\ud83c\\udc00-\\ud83c\\udfff]|[\\ud83d\\udc00-\\ud83d\\udfff]|[\\u2600-\\u27ff]";
Pattern pattern = Pattern.compile(speChat);
Matcher matcher = pattern.matcher(source.toString());
if(matcher.find())return "";
else return null;
}
};
editText.setFilters(new InputFilter[]{new InputFilter.LengthFilter(maxLength), filter});
}