版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/xiogjie_67/article/details/79583726
1.需求场景
现在一些输入法自带emoji表情,EditText是支持该字符输入的,而对于业务来说,输入这些字符又是不合法的,因此需要对这些字符进行过滤,在用户输入时即时给出提示信息。
2.解决方法
为EditText添加输入过滤器.
public InputFilter getInputFilterProhibitEmoji() {
InputFilter filter = new InputFilter() {
@Override
public CharSequence filter(CharSequence source, int start, int end,
Spanned dest, int dstart, int dend) {
StringBuffer buffer = new StringBuffer();
for (int i = start; i < end; i++) {
char codePoint = source.charAt(i);
if (!getIsEmoji(codePoint)) {
buffer.append(codePoint);
} else {
ToastUtil.show(ApplicationContext.getString(R.string
.installment_contact_detail_address_face_tip));
i++;
continue;
}
}
if (source instanceof Spanned) {
SpannableString sp = new SpannableString(buffer);
TextUtils.copySpansFrom((Spanned) source, start, end, null,
sp, 0);
return sp;
} else {
return buffer;
}
}
};
return filter;
}
public boolean getIsEmoji(char codePoint) {
if ((codePoint == 0x0) || (codePoint == 0x9) || (codePoint == 0xA)
|| (codePoint == 0xD)
|| ((codePoint >= 0x20) && (codePoint <= 0xD7FF))
|| ((codePoint >= 0xE000) && (codePoint <= 0xFFFD))
|| ((codePoint >= 0x10000) && (codePoint <= 0x10FFFF)))
return false;
return true;
}
public InputFilter getInputFilterProhibitSP() {
InputFilter filter = new InputFilter() {
@Override
public CharSequence filter(CharSequence source, int start, int end,
Spanned dest, int dstart, int dend) {
StringBuffer buffer = new StringBuffer();
for (int i = start; i < end; i++) {
char codePoint = source.charAt(i);
if (!getIsSp(codePoint)) {
buffer.append(codePoint);
} else {
ToastUtil.show(ApplicationContext.getString(R.string
.installment_contact_detail_address_error_tip));
i++;
continue;
}
}
if (source instanceof Spanned) {
SpannableString sp = new SpannableString(buffer);
TextUtils.copySpansFrom((Spanned) source, start, end, null,
sp, 0);
return sp;
} else {
return buffer;
}
}
};
return filter;
}
public boolean getIsSp(char codePoint){
if(Character.getType(codePoint)>Character.LETTER_NUMBER){
return true;
}
return false;
}
调用方法:
InputFilter[] filters ={getInputFilterProhibitEmoji(),getInputFilterProhibitSP()};
et_contact_detail_address.setFilters(filters);