【Android】android 输入框EditText禁止输入Emoji表情符

转载地址:http://blog.csdn.net/elsdnwn/article/details/45390771

package com.liujy.ui.wiget;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;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, "不支持输入Emoji表情符号", 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));
    }

}
时间: 2024-12-11 03:47:00

【Android】android 输入框EditText禁止输入Emoji表情符的相关文章

Android--&gt;轻松打造带删除按钮的输入框(EditText),附Emoji表情过滤

输入框带删除按钮, 此乃标配, 实现起来方法也很多, 网上开源也很多. 但是, 没事就喜欢瞎折腾. 上图说话. 只是在原生的基础上加了扩展. 相对来说入侵非常少, 使用方法和原生的一模一样.无任何阉割. 完整代码: public class ExEditText extends AppCompatEditText { Rect clearRect = new Rect(); public ExEditText(Context context) { super(context); } public

Android文本输入框(EditText)切换密码的显示与隐藏

package cc.c; import android.app.Activity; import android.os.Bundle; import android.text.Selection; import android.text.Spannable; import android.text.method.HideReturnsTransformationMethod; import android.text.method.PasswordTransformationMethod; im

教你如何让数据库支持emoji表情符存储

From: http://www.cnblogs.com/janehoo/archive/2016/04/06/5359800.html 一.教你如何让数据库支持emoji表情符存储 解决方式:更换字符集utf8-->utf8mb4 上周有开发人员反馈一个问题:前台应用抓取微博信息,每天总有几条数据插入不成功.应用日志显示: java.sql.SQLException: Incorrect string value: '\xF0\x9F\x92\xAA",...' for column '

移动端过禁止输入emoji表情实现方案

最近手头上的项目有一个需求就是输入框不能输入表情,然后就各种在网上找资料,网上好多人给的方案是: str = str.replace(/\uD83C[\uDF00-\uDFFF]|\uD83D[\uDC00-\uDE4F]/g, ""); 用法大概就是: <input onkeyup = "this.value = value.replace(/\uD83C[\uDF00-\uDFFF]|\uD83D[\uDC00-\uDE4F]/g, "")&qu

过滤emoji表情符

1.使用正则匹配 public  function remove_emoji($text){        return preg_replace('/([0-9|#][\x{20E3}])|[\x{00ae}|\x{00a9}|\x{203C}|\x{2047}|\x{2048}|\x{2049}|\x{3030}|\x{303D}|\x{2139}|\x{2122}|\x{3297}|\x{3299}][\x{FE00}-\x{FEFF}]?|[\x{2190}-\x{21FF}][\x{F

java处理数据库不支持的emoji表情符

一般数据库的编码是utf8,utf8是不支持存储表情符的,当存入的微信昵称带有表情符时就会出现乱码情况,有两种解决方法: 1.mysql数据库升级到5.5版本以上,utf8改为utf8mb4,utf8mb4的字符最多可以是4个字节,可以存储表情符,重启数据库服务器,这种方式有可能会失效; 2.在java代码里过滤掉表情符,简洁高效,下面是过滤掉表情符的工具类: import java.util.regex.Matcher; import java.util.regex.Pattern; publ

mysql utf8mb4与emoji表情[转]

MYSQL 5.5 之前, UTF8 编码只支持1-3个字节,只支持BMP这部分的unicode编码区, BMP是从哪到哪,到http://en.wikipedia.org/wiki/Mapping_of_Unicode_characters这里看,基本就是0000-FFFF这一区. 从MYSQL5.5开始,可支持4个字节UTF编码utf8mb4,一个字符最多能有4字节,所以能支持更多的字符集. utf8mb4 is a superset of utf8 utf8mb4兼容utf8,且比utf8

有关emoji表情以及utf-16编码

昨日IOS组的同事遇到一个棘手的问题:当输入框内含有emoji表情时,如何获取文本框内的字符数(一个emoji表情算一个字符). 先从我最近接触的JAVA说起,JAVA中,在使用String的length方法时,如果是普通的中英文字符,没有问题,但是如果该字符的Unicode编码大于0xFFFF,这个length方法就不能正确的获取字符数量了,事实上会把这样的特殊字符计算成2个字符.当然,JAVA已有现成的方法解决这个问题:codePointCount. 可惜的是,找了很久,在Objective

mysql utf8mb4与emoji表情

一 什么是Emoji emoji就是表情符号:词义来自日语(えもじ,e-moji,moji在日语中的含义是字符) 表情符号现已普遍应用于手机短信和网络聊天软件. emoji表情符号,在外国的手机短信里面已经是很流行使用的一种表情. 手机上如何使用emoji: 1.iphone.ipad系统:安装emoji free,再设置-通用-键盘-国际键盘-添加新的键盘,然后把emoji添加在里面即可在发短信和一些输入文本的文本框中输入表情. IOS 5用户可直接从通用中添加emoji 键盘,无需再安装em