在开发中很多后台数据库不支持emoji表情插入,那么需要我们在EditText结果输出时过滤掉。同样emoji表情也是有着对应的Unicode,相关参考 Emoji Unicode Tables  下面我就针对它的几个区来实现我们的过滤。 通过自定义InputFilter过滤器来实现,代码如下
import android.text.InputFilter;import android.text.Spanned;import android.text.TextUtils;/** * 过滤emoji表情 * Created by pwe on 2018/5/12. */public class EmojiFilter implements InputFilter {    public EmojiFilter() {        super();    }    @Override    public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {        return filterEmoji(source);    }    /**     1F30D - 1F567     1F600 - 1F636     24C2 - 1F251     1F680 - 1F6C0     2702 - 27B0     1F601 - 1F64F     */    private boolean isEmojiCharacter(int first) {        return !                ((first == 0x0) ||                        (first == 0x9) ||                        (first == 0xA) ||                        (first == 0xD) ||                        ((first >= 0x20) && (first <= 0xD7FF)) ||                        ((first >= 0xE000) && (first <= 0xFFFD)) ||                        ((first >= 0x10000))) ||                (first == 0xa9 || first == 0xae || first == 0x2122 ||                        first == 0x3030 || (first >= 0x25b6 && first <= 0x27bf) ||                        first == 0x2328 || (first >= 0x23e9 && first <= 0x23fa))                || ((first >= 0x1F000 && first <= 0x1FFFF))                || ((first >= 0x2702) && (first <= 0x27B0))                || ((first >= 0x1F601) && (first <= 0x1F64F));    }    private boolean containsEmoji(String str) {        if (TextUtils.isEmpty(str)) {            return false;        }        for (int i = 0; i < str.length(); i++) {            int cp = str.codePointAt(i);            if (isEmojiCharacter(cp)) {                return true;            }        }        return false;    }    private CharSequence filterEmoji(CharSequence c) {        if (!containsEmoji(c.toString())) {            return c;        }        StringBuilder buf = null;        int len = c.length();        for (int i = 0; i < len; i++) {            char codePoint = c.charAt(i);            if (!isEmojiCharacter(codePoint)) {                if (buf == null) {                    buf = new StringBuilder(c.length());                }                buf.append(codePoint);            }        }        if (buf == null) {            return "";        }        return buf;    }}

接下来就是具体的引用啦
mEditText.setFilters(new InputFilter[]{new EmojiFilter()});
ok,搞定,现在已经无法再输入emoji表情了

更多相关文章

  1. logcat使用方法
  2. Permission Denial: opening provider 隐藏的android:exported属
  3. Android腾讯微薄客户端开发六:给用户加VIP认证以及美化微博显示
  4. Android(安卓)ListView用EditText实现搜索功能效果
  5. AndroidQ 系统自带文件选择器
  6. 天天记录 - Android抓包 - 抓取HTTP,TCP协议数据
  7. 过滤Android工程中多余资源文件的解决方法
  8. Android的CursorAdapter与CursorFilter机制
  9. 关于 android 中 edittext 特殊字符过滤和字符长度限制的最优方

随机推荐

  1. android监听ScrollView滑动停止
  2. Android Studio/Gradle/重复依赖
  3. Android PopupWindow做的分享界面
  4. 开发必读:如何成为一名优秀的Android开发
  5. Android app开机启动
  6. Android中数据共享机制的实现——Content
  7. Android系统的过滤机制大揭秘——原创
  8. android获取控件的几种方法
  9. android如何调用Web Service手机归属地练
  10. android 隐藏状态栏和导航栏