andriod EditText限制不能輸入表情

表情占用兩個(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;

}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀(guān)點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容