andriod EditText限制不能输入表情

表情占用两个字符,选中之后删除

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;

}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容