【Android】android 输入框EditText禁止输入Emoji表情符
16lz
2022-05-25
转载地址:http://blog.csdn.net/elsdnwn/article/details/45390771
packagecom.liujy.ui.wiget;importandroid.content.Context;importandroid.text.Editable;importandroid.text.Selection;importandroid.text.Spannable;importandroid.text.TextWatcher;importandroid.util.AttributeSet;importandroid.widget.EditText;publicclassContainsEmojiEditTextextendsEditText{//输入表情前的光标位置privateintcursorPos;//输入表情前EditText中的文本privateStringinputAfterText;//是否重置了EditText的内容privatebooleanresetText;privateContextmContext;publicContainsEmojiEditText(Contextcontext){super(context);this.mContext=context;initEditText();}publicContainsEmojiEditText(Contextcontext,AttributeSetattrs){super(context,attrs);this.mContext=context;initEditText();}publicContainsEmojiEditText(Contextcontext,AttributeSetattrs,intdefStyleAttr){super(context,attrs,defStyleAttr);this.mContext=context;initEditText();}//初始化edittext控件privatevoidinitEditText(){addTextChangedListener(newTextWatcher(){@OverridepublicvoidbeforeTextChanged(CharSequences,intstart,intbefore,intcount){if(!resetText){cursorPos=getSelectionEnd();//这里用s.toString()而不直接用s是因为如果用s,//那么,inputAfterText和s在内存中指向的是同一个地址,s改变了,//inputAfterText也就改变了,那么表情过滤就失败了inputAfterText=s.toString();}}@OverridepublicvoidonTextChanged(CharSequences,intstart,intbefore,intcount){if(!resetText){if(count>=2){//表情符号的字符长度最小为2CharSequenceinput=s.subSequence(cursorPos,cursorPos+count);if(containsEmoji(input.toString())){resetText=true;Toast.makeText(mContext,"不支持输入Emoji表情符号",Toast.LENGTH_SHORT).show();//是表情符号就将文本还原为输入表情符号之前的内容setText(inputAfterText);CharSequencetext=getText();if(textinstanceofSpannable){SpannablespanText=(Spannable)text;Selection.setSelection(spanText,text.length());}}}}else{resetText=false;}}@OverridepublicvoidafterTextChanged(Editableeditable){}});}/***检测是否有emoji表情**@paramsource*@return*/publicstaticbooleancontainsEmoji(Stringsource){intlen=source.length();for(inti=0;i<len;i++){charcodePoint=source.charAt(i);if(!isEmojiCharacter(codePoint)){//如果不能匹配,则该字符是Emoji表情returntrue;}}returnfalse;}/***判断是否是Emoji**@paramcodePoint比较的单个字符*@return*/privatestaticbooleanisEmojiCharacter(charcodePoint){return(codePoint==0x0)||(codePoint==0x9)||(codePoint==0xA)||(codePoint==0xD)||((codePoint>=0x20)&&(codePoint<=0xD7FF))||((codePoint>=0xE000)&&(codePoint<=0xFFFD))||((codePoint>=0x10000)&&(codePoint<=0x10FFFF));}}
更多相关文章
- Android的EditText无法自动弹出输入法问题
- Android学习札记48:将TextView中的指定文字转换为表情显示
- Android腾讯微博客户端开发四:微博发送篇(QQ表情,@搜索)
- 捕获Android文本输入框的软键盘完成(Done)按键消息
- android中限制EditText最大输入字节数
- android edittext 输入手机号码格式变化
- Android(安卓)EditText 密码输入框可见性设置
- Android(安卓)TextUtils类介绍
- Android(安卓)EditText输入框被键盘遮挡问题解决