表情占用两个字符,选中之后删除
et_remarks.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
//TextView显示剩余字数
tv_remarks_number.setText(s.length() +"/" +200);
if (s.length() >200) {
showShortToast("最多输入200个字符");
et_remarks.setText(s.toString().substring(0, 200));
et_remarks.setSelection(200);//设置光标在最后
}
}
@Override
public void afterTextChanged(Editable s) {
int index =et_remarks.getSelectionStart() -1;
if (index >0) {
if (!Util.containsEmoji(s.toString())) {
Editable edit =et_remarks.getText();
edit.delete(s.length() -2, s.length());
showShortToast("不支持输入表情符号");
}
}
}
});
单个字符
public static boolean isEmojiCharacter(char codePoint) {
return !((codePoint ==0x0) || (codePoint ==0x9) || (codePoint ==0xA) || (codePoint ==0xD) ||((codePoint >=0x20) && codePoint <=0xD7FF)) || ((codePoint >=0xE000) && (codePoint <=0xFFFD)) || ((codePoint >=0x10000) && (codePoint <=0x10FFFF));
}
检测是否有emoji表情
public static boolean containsEmoji(String source) {
int len = source.length();
for (int i =0; i < len; i++) {
char codePoint = source.charAt(i);
if (!isEmojiCharacter(codePoint)) {//如果不能匹配,则该字符是Emoji表情
return true;
}
}
return false;
}