Android 键盘输入表情和颜文字禁用


public class EmojiExcludeFilter implements InputFilter {

   @Override
   public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {
      boolean hasManyType = false;
      int sourcelen = 0;
      for (int i = start; i < end; i++) {
         int type = Character.getType(source.charAt(i));
         Log.e("InputFilter","text:"+source.toString()+","+type);
         if (type == Character.SURROGATE || type == Character.OTHER_SYMBOL) {
            Log.e("InputFilter","text 133");
            return "";
         }
         sourcelen ++;
         if(type!=Character.UPPERCASE_LETTER&&type!=Character.BYTES&&type!=Character.DECIMAL_DIGIT_NUMBER&&type!=Character.OTHER_LETTER&&type!=Character.SPACE_SEPARATOR){
            hasManyType = true;
         }
      }

      if("◽".equals(source.toString())||"◼".equals(source.toString())||"◻".equals(source.toString())){
         Log.e("InputFilter","text:143");
         return "";
      }
      if("〰".equals(source.toString())||"〽".equals(source.toString())||"⤵".equals(source.toString())){
         Log.e("InputFilter","text:147");
         return "";
      }
      if("⤴".equals(source.toString())||"◾".equals(source.toString())||"⤵".equals(source.toString())){
         Log.e("InputFilter","text:151");
         return "";
      }
      if(hasManyType&&sourcelen>1){//处理
         Log.e("InputFilter","text:155:"+source.toString());
         return "";
      }

      Log.e("InputFilter","text:"+source.toString()+","+source.toString());
      return null;
   }
}

表情的type是单一数值可以直接筛选;

颜文字的type是有多种类型拼接起来的:常用字符(type:2),数值(type:9),中文(5),空格以及其他特殊字符组成,并且颜文字的长度肯定大于1。如果字符长度大于1并且包含特殊字符,可以判定该次输入为颜文字。

Leave a Reply

Your email address will not be published. Required fields are marked *