在开发中可能多处会用到过滤Emoji表情符,一般情况下,我们会通过EditText的addTextChangedListener()监听来过滤Emoji表情,但在实际开发中会遇到多个EditText,为了方便使用,我们可以自定义EditText来实现,代码如下:

package com.piesat.dragonfly.ui.view;

import android.content.Context;

import android.text.Editable;

import android.text.Selection;

import android.text.Spannable;

import android.text.TextWatcher;

import android.util.AttributeSet;

import android.widget.EditText;

import android.widget.Toast;

/**

* @Description EditText限制输入表情符号

* @Authour zhoujp

* @Time 2016年11月18日 下午2:09:58

*

*/

public class ContainsEmojiEditText extends EditText {

// 输入表情前的光标位置

private int cursorPos;

// 输入表情前EditText中的文本

private String inputAfterText;

// 是否重置了EditText的内容

private boolean resetText;

private Context mContext;

public ContainsEmojiEditText(Context context) {

super(context);

this.mContext = context;

initEditText();

}

public ContainsEmojiEditText(Context context, AttributeSet attrs) {

super(context, attrs);

this.mContext = context;

initEditText();

}

public ContainsEmojiEditText(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;

Toast.makeText(mContext, "不支持输入表情符号!", Toast.LENGTH_SHORT).show();

// 是表情符号就将文本还原为输入表情符号之前的内容

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));

}

}

android edittext 输入法表情,Android开发中EditText禁止输入Emoji表情符相关推荐

  1. PHP开发中涉及到emoji表情的几种处理方法

    最近几个月做微信开发比较多,存储微信昵称必不可少 可这万恶的微信支持emoji表情做昵称,这就有点蛋疼了 一般Mysql表设计时,都是用UTF8字符集的.把带有emoji的昵称字段往里面insert一 ...

  2. php emoji 保存 显示,PHP开发中涉及到emoji表情的几种处理方法

    最近几个月做微信开发比较多,存储微信昵称必不可少 可这万恶的微信支持emoji表情做昵称,这就有点蛋疼了 一般Mysql表设计时,都是用UTF8字符集的.把带有emoji的昵称字段往里面insert一 ...

  3. php 表情 代码_PHP 开发中涉及到emoji表情的几种处理方法

    最近几个月做微信开发比较多,存储微信昵称必不可少 可这万恶的微信支持emoji表情做昵称,这就有点蛋疼了 一般Mysql表设计时,都是用UTF8字符集的.把带有emoji的昵称字段往里面insert一 ...

  4. Android开发中EditText:一、属性详解

    在android开发中,EditText组件是一个常用控件,也是一个比较重要的组件,它的基本属性需要熟练使用才行,接下来就来讲一下在Android开发中EditText组件的基本使用. 一.基本属性 ...

  5. android 自定义输入法布局,Android自定义输入法使用方法

    Android自定义输入法使用方法 时间:2017-04-21     来源:Android开发学习网 对于Android用户而言,一般都会使用第三方的输入法.可是在输入密码时(尤其是支付相关的密码) ...

  6. mysql插入表情_向MySQL数据库中插入带emoji表情符的数据时报错

    问题:向MySQL数据库中插入带emoji表情符的数据时报错 原因:utf8字符集不支持emoji表情符,需要改为utf8mb4字符集(utf8mb4是MySQL在5.5.3之后增加的,实际开发中建议 ...

  7. 判断字符串中是否包含Emoji表情代码

    判断字符串中是否包含Emoji表情代码: + (BOOL)stringContainsEmoji:(NSString *)string { __block BOOL returnValue = NO; ...

  8. markdown中快速插入Emoji表情包语法速查表!!!

    markdown中快速插入Emoji表情包语法速查表!!!

  9. java emoji表情 乱码_java 微信昵称带有emoji 表情乱码

    问题描述: ipone5s中昵称输入"emoji表情",保存数据库有问题. 运行环境: Java.Tomcat.mysql.Linux(我的Linux下为乱码,这个是linux问题 ...

最新文章

  1. 多线程CreateThread函数的用法及注意事项
  2. 使用use index优化sql查询
  3. 前端开发中的调试技巧
  4. QApplication
  5. div+css布局与seo的关系
  6. (收藏)《博客园精华集》分类索引
  7. python 拼音输入法_ubuntu上安装 ibus Google拼音输入法(修改一点错误)
  8. NBSI2内部功能实现大揭谜 1
  9. L73.linux命令每日一练 -- 第十章 Linux网络管理命令 -- dig和host
  10. 泛型编程和元编程概念(先学泛型编程再学元编程)
  11. 红帽linux安装intel(R) wifi link 5100 AGN总结
  12. C# Excel 操作
  13. VS 2013的初配置
  14. “我不是坚强,我只是走投无路”,从职高到杭电、浙大、麻省计算机博士!...
  15. 如何查看计算机主机端口型号,电脑端口号怎么查看(怎么查自己电脑的端口号)...
  16. vertica用户自定义扩展介绍
  17. HDU 5761 Rower Bo
  18. Hilbert各种概念一览
  19. 为什么串口传输速度比并口快?
  20. 校园跑腿是什么,能够做哪些校园跑腿服务?

热门文章

  1. 阿里云认证攻略,考试注意事项
  2. ​Android实现仿QQ登录可编辑下拉菜单
  3. python多任务,线程详解
  4. 学计算机的人c语言修仙评价,评《C语言修仙》 非渊静者 评《C语言修仙》 时间:2019-05-04 11:55:19...
  5. crawler(2)
  6. 华为相机M系列交叉编译32位openssl
  7. 不足100克按100克C语言,C语言_第3章.ppt
  8. 开发指南专题六:JEECG微云快速开发平台代码生成
  9. Netdata监控安装(汉化)
  10. nlp小白教程:word2vec之数据预处理