转载地址: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));}}


更多相关文章

  1. Android的EditText无法自动弹出输入法问题
  2. Android学习札记48:将TextView中的指定文字转换为表情显示
  3. Android腾讯微博客户端开发四:微博发送篇(QQ表情,@搜索)
  4. 捕获Android文本输入框的软键盘完成(Done)按键消息
  5. android中限制EditText最大输入字节数
  6. android edittext 输入手机号码格式变化
  7. Android(安卓)EditText 密码输入框可见性设置
  8. Android(安卓)TextUtils类介绍
  9. Android(安卓)EditText输入框被键盘遮挡问题解决

随机推荐

  1. Android(安卓)调用系统原生相机拍照并储
  2. Android(安卓)所有可访问的权限
  3. Android(安卓)setMovementMethod() 方法
  4. Android(安卓)音视频该如何学习?
  5. Android相关经验积累总结
  6. Android(安卓)获取屏幕宽度、高度、dpi等
  7. 使用sencha cmd创建android应用
  8. Android中判断网络连接是否可用及监控网
  9. Android输入法的显示或隐藏
  10. android 小游戏 ---- 数独(二)