一、前言

以前在做社区项目时,有个IM的需求,里面用到了自定义表情,
那时基本的做法就是在string.xml里面定义一个StringArray表情含义数组,里面每一个含义对应一个表情。
当在EditText输入时表情时,先根据正则表达式来得到该表情所对应的文字,再根据该含义去drawable资源里面获取相应的drawable表情文件。最后把这个drawable拼接到EditText输入内容后面,调用invalidate()方法,让其重画。

二、正文

前言里面说到,EditText里面输入自定义表情,那是已经知道表情的文字格式,那假如现在不是输入自定义表情,而是第三方输入法自带的表情,那要怎么样禁止输入呢?

基本的思路跟上面还是一样,根据正则表达式来对表情进行一个过滤。
这样,那问题的关键点就在正则表达式,
下面贴出我在网上找的一个正则表达:
private static final String exPressionReg = "^([a-z]|[A-Z]|[0-9]|[\u2E80-\u9FFF]){3,}|
@(?:\w?\.)+\w?
|[.net]{4}|[.org]{4}|[http://]{7}|[ftp://]{6}$";

接下来就是编写TextWatcher过滤监听器了。
基本思路:
1,在输入表情前,先保存EditText已经输入的文字;
2,输入表情后,利用正则表达式对刚输入的东东进行匹配,
如果是表情,则保留截取先前输入的文字,View重画。

有了思路,就看下面代码的实现:


mEditRoom.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
if(!resetText){
//输入前,获取光标的位置(文字结尾处)
cursorPos = mEditRoom.getSelectionEnd();
temp = s.toString();
}
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
if(!resetText){
if(count >= 2){
CharSequence content = s.subSequence(cursorPos,cursorPos+count);
boolean isExpression = PatternUtils.checkExpression(content.toString());
if(isExpression){
resetText = true;
mEditRoom.setText(temp);
mEditRoom.setSelection(temp.length());
mEditRoom.invalidate();
CommonToast.showToast(mContext,getString(R.string.device_location_cannot_input_expression));
}
}
}else {
resetText = false;
}
}
@Override
public void afterTextChanged(Editable s) {
}
})}

以上就是EditText禁止输入表情的所有实现了。

EditText禁止输入表情相关推荐

  1. EditText 禁止输入表情包的正则表达式

    EditText 禁止输入表情包的正则表达式 InputFilter emojiFilter = new InputFilter() {Pattern emoji = Pattern.compile( ...

  2. android 不能输表情,Android中EditText禁止输入表情

    最近在做的项目中用户编辑资料的时候不希望用户输入表情,如果用户输入表情的话上传给后台要报错,所以需要我们前端做一个判断.下面就来说一下怎么在EditText中屏蔽表情吧. 网上有很多这样的列子但是一不 ...

  3. Android实战场景 - 限制EditText仅支持输入数字、英文、汉字,禁止输入表情等特殊符号

    因项目需求,需要禁止用户输入表情符号,具体如下 ~ EditText相关Blog TextView.EditText属性大全 监听 EditText 文本变化 设置 EditText 光标颜色与下划线 ...

  4. android edittext 输入法表情,Android开发中EditText禁止输入Emoji表情符

    在开发中可能多处会用到过滤Emoji表情符,一般情况下,我们会通过EditText的addTextChangedListener()监听来过滤Emoji表情,但在实际开发中会遇到多个EditText, ...

  5. android edittext禁止输入特殊字符,禁止输入表情以及特殊字符方法

    /** * 禁止输入表情以及特殊字符 */ public static class EmojiExcludeFilter implements InputFilter { @Override publ ...

  6. Android实现EditText禁止输入换行符但可以根据内容自动换行的解决方法

    Android实现EditText禁止输入换行符但可以根据内容自动换行的解决方法 参考文章: (1)Android实现EditText禁止输入换行符但可以根据内容自动换行的解决方法 (2)https: ...

  7. 输入框中-------禁止输入表情

    最近遇到了一个需求,就是在设置账号名称中禁止输入表情,就把该知识点整理了一下,记录以便下次查找. 可能还有不完善之处,请各位补充. 方法1:此方法个别表情识别不出来   比如我的华为手机 电话表情 不 ...

  8. 正则验证 input 输入框,禁止输入表情包

    禁止输入表情包方法如下: includeSpecial (value) {if (!value) {return}// eslint-disable-next-lineconst regStr = / ...

  9. android edittext禁止输入特殊字符,Android edittext 禁止输入特殊字符/或者表情符的方案...

    添加过滤器    在每个有edittext的Activity中 ,都添加如下代码: InputFilter inputFilter= new InputFilter() { Pattern emoji ...

最新文章

  1. makefile多文件编译
  2. android 解决Date.gettimezoneoffset已经废弃
  3. RabbitMQ批量确认发布
  4. centos minimal Bind 主从服务器部署
  5. Hex hsl 转换 php,关于 RGB,HEX,HSL 颜色相互转换
  6. java想要生成 字符串,如何在Java中“优雅地”生成String?
  7. Linux中修改环境变量及生效方法
  8. 数组模拟加法(每日一练 11.30)
  9. python dict批量选择_用python实现word内容批量替换
  10. 3.shell 程序设计(2)
  11. Can't connect to X11 window server using 'localhos
  12. nrf52832(nrf52810)之硬件I2C(TWI)驱动BMI160
  13. 免费公网动态IP方案
  14. 什么是实验室人员比对人员_实验室人员比对分析方法的讨论
  15. 求助:如何实现EA自动判断趋势,寻找高低点,并获取高低点K线价格数据,然后根据价格画出支撑阻力区域.
  16. 计算机基础土星,2012年一级B笔试模拟343
  17. 纵深与动感同在 体会线条构图的魅力
  18. 路由器和交换机的区别?
  19. m1芯片的mac怎样安装PS2021 m1芯片的mac安装Photoshop21适配版解决方案 2021最新方法
  20. 三个等于号===与两个等于号==

热门文章

  1. 项目管理中的进度控制与目标计划
  2. VOLTE注册失败案例
  3. Postgresql页面xmax与multixact
  4. 除了VR 还有什么能在2016年撬动物联网?
  5. labelImg ZeroDivisionError: float division by zero解决办法
  6. 【zyc的从零开始】20211012 运算符
  7. Midjourney 文本转图片接口请求参数
  8. ANSYS fluent
  9. Byte历险记(tomcat+web游历)
  10. 视频浓缩中的轨迹组合技术