给edittext添加inputfilter,同时对键盘输入和剪切板粘贴有效
edittext.setFilters(new InputFilter[]{emojiFilter});
复制代码
public class EmojiInputFilter implements InputFilter {
private static final String EMOJI_REGEX = "(?:" +
"[\\uD83C\\uDE01\\uD83C\\uDE02\\uD83C\\uDE1A\\uD83C\\uDE2F\\uD83C\\uDE32-\\uD83C\\uDE3A\\uD83C\\uDE50\\uD83C\\uDE51]\\uFE0F?|" +
"[\\uD83C\\uDD70\\uD83C\\uDD71\\uD83C\\uDD7E\\uD83C\\uDD7F\\uD83C\\uDD8E\\uD83C\\uDD91-\\uD83C\\uDD9A]\\uFE0F?|" +
"[\\u231A\\u231B\\u2328\\u23CF\\u23E9-\\u23F3\\u23F8-\\u23FA]\\uFE0F|" +
"[\\u25AA\\u25AB\\u25B6\\u25C0\\u25FB-\\u25FE]\\uFE0F?|" +
"[\\u2B05-\\u2B07\\u2B1B\\u2B1C\\u2B50\\u2B55]\\uFE0F?|" +
"[\\u0023\\u002A\\u0030-\\u0039]\\uFE0F?\\u20E3|" +
"[\\u2194-\\u2199\\u21A9-\\u21AA]\\uFE0F?|" +
"[\\uD83C\\uDDE6-\\uD83C\\uDDFF]{1,2}|" +
"[\\u2600-\\u26FF]\\uFE0F?|" +
"[\\u2700-\\u27BF]\\uFE0F?|" +
"[\\u2934\\u2935]\\uFE0F?|" +
"[\\u3030\\u303D]\\uFE0F?|" +
"[\\u3297\\u3299]\\uFE0F?|" +
"[\\u203C\\u2049]\\uFE0F?|" +
"[\\u00A9\\u00AE]\\uFE0F?|" +
"[\\u2122\\u2139]\\uFE0F?|" +
"[\\ud83d\\udc00-\\ud83d\\udfff]\\uFE0F?|" +
"\\uD83C\\uDC04\\uFE0F?|" +
"\\uD83C\\uDCCF\\uFE0F?|" +
"\\u24C2\\uFE0F?|" +
"[\\uD83C\\uDF00-\\uD83D\\uDDFF]\\uFE0F?|" +
"[\\uD83E\\uDD00-\\uD83E\\uDDFF]\\uFE0F?|" +
"[\\uD83D\\uDE00-\\uD83D\\uDE4F]\\uFE0F?|" +
"[\\uD83D\\uDE80-\\uD83D\\uDEFF]\\uFE0F?" +
"?)";
private final Pattern pattern = Pattern.compile(EMOJI_REGEX);
@Override
public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {
if (source == null) {
return null;
}
Matcher matcher = pattern.matcher(source);
if (matcher.find()) {
return matcher.replaceAll("");
}
return source;
}
}
复制代码