Android(安卓)emoji表情处理
16lz
2021-01-26
在开发中很多后台数据库不支持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表情了 更多相关文章
- logcat使用方法
- Permission Denial: opening provider 隐藏的android:exported属
- Android腾讯微薄客户端开发六:给用户加VIP认证以及美化微博显示
- Android(安卓)ListView用EditText实现搜索功能效果
- AndroidQ 系统自带文件选择器
- 天天记录 - Android抓包 - 抓取HTTP,TCP协议数据
- 过滤Android工程中多余资源文件的解决方法
- Android的CursorAdapter与CursorFilter机制
- 关于 android 中 edittext 特殊字符过滤和字符长度限制的最优方