android禁止EditText输入emoji表情图片

来源:互联网 发布:抠图算法 编辑:程序博客网 时间:2024/05/19 12:28
方法一:给EditText设置过滤器,这样在输入emoji的时候就没有反应  
 
[java] view plain copy
  1. private static InputFilter emojiFilter = new InputFilter() {  
  2.   
  3.   
  4.         Pattern emoji = Pattern.compile(  
  5.   
  6.   
  7.         "[\ud83c\udc00-\ud83c\udfff]|[\ud83d\udc00-\ud83d\udfff]|[\u2600-\u27ff]",  
  8.   
  9.   
  10.         Pattern.UNICODE_CASE | Pattern.CASE_INSENSITIVE);  
  11.   
  12.   
  13.         @Override  
  14.         public CharSequence filter(CharSequence source, int start, int end, Spanned dest,  
  15.                 int dstart,  
  16.   
  17.   
  18.                 int dend) {  
  19.   
  20.   
  21.             Matcher emojiMatcher = emoji.matcher(source);  
  22.   
  23.   
  24.             if (emojiMatcher.find()) {  
  25.   
  26.   
  27.                 return "";  
  28.   
  29.   
  30.             }  
  31.             return null;  
  32.   
  33.   
  34.         }  
  35.     };  
  36.   
  37.   
  38.     public static InputFilter[] emojiFilters = {emojiFilter};  
  39.     editText.setFilters(emojiFilters);\  



方法二:检测输入的内容中是否含有emoji


[java] view plain copy
  1. /** * 检测是否有emoji表情 * @param source * @return */  
  2.    public static boolean containsEmoji(String source) {                          //两种方法限制emoji  
  3.        int len = source.length();  
  4.        for (int i = 0; i < len; i++) {  
  5.            char codePoint = source.charAt(i);  
  6.            if (!isEmojiCharacter(codePoint)) { //如果不能匹配,则该字符是Emoji表情   
  7.                return true;  
  8.            }  
  9.        }  
  10.        return false;  
  11.    }  
  12.   
  13.   
  14.    /** * 判断是否是Emoji * @param codePoint 比较的单个字符 * @return */  
  15.    private static boolean isEmojiCharacter(char codePoint) {  
  16.        return (codePoint == 0x0) || (codePoint == 0x9) || (codePoint == 0xA) || (codePoint == 0xD)  
  17.                || ((codePoint >= 0x20) && (codePoint <= 0xD7FF))  
  18.                || ((codePoint >= 0xE000) && (codePoint <= 0xFFFD))  
  19.                || ((codePoint >= 0x10000) && (codePoint <= 0x10FFFF));  
  20.    }  
0 0