表情占用兩個(gè)字符,選中之后刪除
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顯示剩余字?jǐn)?shù)
? ? ? ? tv_remarks_number.setText(s.length() +"/" +200);
? ? ? ? if (s.length() >200) {
showShortToast("最多輸入200個(gè)字符");
? ? ? ? ? ? et_remarks.setText(s.toString().substring(0, 200));
? ? ? ? ? ? et_remarks.setSelection(200);//設(shè)置光標(biāo)在最后
? ? ? ? }
}
@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("不支持輸入表情符號(hào)");
? ? ? ? ? ? }
}
}
});
單個(gè)字符
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));
}
檢測(cè)是否有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;
}