Android禁止输入表情符号的EditText
来源:互联网 发布:在github上下载源码 编辑:程序博客网 时间:2024/05/16 18:27
最近刚做完项目,出了个测试包
就开开心心的把项目发给老板测试了
老板刚装上就给我批评了一顿,说刚用上就发现一个重大bug,还想不想要工资了
我当时心里就想:“sb,不会用吧”。。。。。
言归正传,现在很多输入法都自带了表情,输入的时候很方便,但是对我们程序员来说就不那么方便了,因为直接输入表情后台不做处理的话会报错的。虽然跟我们前端没有半毛钱关系,但是这毕竟也是一个bug,该处理处理下。
在网上看了些资料发现emoji表情还是有个范围的
(codePoint == 0x0) || (codePoint == 0x9) || (codePoint == 0xA) || (codePoint == 0xD) || ((codePoint >= 0x20) && (codePoint <= 0xD7FF)) || ((codePoint >= 0xE000) && (codePoint <= 0xFFFD)) || ((codePoint >= 0x10000) && (codePoint <= 0x10FFFF))
这就好办多了,然后我们就可以通过上面的表达式判断是否是表情符号
于是我们就可以开始自定义EditText了
public class NoEmojiEditText extends android.support.v7.widget.AppCompatEditText { // 输入表情前的光标位置 private int cursorPos; // 输入表情前EditText中的文本 private String inputAfterText; // 是否重置了EditText的内容 private boolean resetText; private Context mContext; public NoEmojiEditText(Context context) { super(context); this.mContext = context; initEditText(); } public NoEmojiEditText(Context context, AttributeSet attrs) { super(context, attrs); this.mContext = context; initEditText(); } public NoEmojiEditText(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); this.mContext = context; initEditText(); } // 初始化edittext 控件 private void initEditText() { addTextChangedListener(new TextWatcher() { @Override public void beforeTextChanged(CharSequence s, int start, int before, int count) { if (!resetText) { cursorPos = getSelectionEnd(); // 这里用s.toString()而不直接用s是因为如果用s,// 那么,inputAfterText和s在内存中指向的是同一个地址,s改变了,// inputAfterText也就改变了,那么表情过滤就失败了 inputAfterText = s.toString(); } } @Override public void onTextChanged(CharSequence s, int start, int before, int count) { if (!resetText) { if (count >= 2) {// 表情符号的字符长度最小为2 CharSequence input = s.subSequence(cursorPos, cursorPos + count); if (containsEmoji(input.toString())) { resetText = true; //暂不支持输入Emoji表情符号 ToastUtil.showShortToast(mContext, "暂不支持输入表情符号");// 是表情符号就将文本还原为输入表情符号之前的内容 setText(inputAfterText); CharSequence text = getText(); if (text instanceof Spannable) { Spannable spanText = (Spannable) text; Selection.setSelection(spanText, text.length()); } } } } else { resetText = false; } } @Override public void afterTextChanged(Editable editable) { } }); } /** * 检测是否有emoji表情 * * @param source * @return */ public static boolean containsEmoji(String source) { int len = source.length(); for (int i = 0; i < len; i++) { char codePoint = source.charAt(i); if (!isEmojiCharacter(codePoint)) { // 如果不能匹配,则该字符是Emoji表情 return true; } } return false; } /** * 判断是否是Emoji * * @param codePoint 比较的单个字符 * @return */ private static boolean isEmojiCharacter(char codePoint) { return (codePoint == 0x0) || (codePoint == 0x9) || (codePoint == 0xA) || (codePoint == 0xD) || ((codePoint >= 0x20) && (codePoint <= 0xD7FF)) || ((codePoint >= 0xE000) && (codePoint <= 0xFFFD)) || ((codePoint >= 0x10000) && (codePoint <= 0x10FFFF)); }}
阅读全文
1 0
- Android禁止输入表情符号的EditText
- EditText禁止输入表情符号
- Android禁止输入表情符号
- Android之Edittext禁止输入表情符号(雷惊风)
- 禁止在EditText中输入表情及表情符号的方法
- Android 禁止输入emoji表情符号
- Android 禁止输入emoji表情符号
- EditText限制输入字数,并且禁止输入表情符号
- ios 禁止输入表情符号
- 禁止输入各种表情符号
- 禁止输入表情符号
- Android Edittext过滤表情符号
- Android EditText 禁止输入表情
- android EditText 禁止表情输入
- 关于iOS禁止输入表情符号
- 限制EditText 输入Emjoy 表情符号
- 禁止输入表情的EditText
- android EditText禁止输入的几种做法
- 网络爬虫---1.简介
- Drag-and-Drop——拖拽
- Objective-C 内存管理
- SAX方法解析XML文件
- linux 下调用opencv接口函数实现鼠标在窗口画方框操作
- Android禁止输入表情符号的EditText
- CDN(内容分发网络)技术原理
- hadoop之map读取数据流程
- ros catkin_make 出现add_custom_target cannot create target 错误
- TCP三次握手连接及seq和ack号的正确理解
- BZOJ 3622 已经没有什么好害怕的了
- Objective-C 语法二(对象初始化)
- PKI系统深入介绍
- twitter工程师的一点经验