文档章节

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

少年追梦
 少年追梦
发布于 2015/06/12 18:46
字数 405
阅读 6822
收藏 13

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

}


本文转载自:http://blog.csdn.net/elsdnwn/article/details/45390771

少年追梦
粉丝 2
博文 51
码字总数 6940
作品 0
海淀
程序员
私信 提问
加载中

评论(1)

g
gxm82
但是有个问题,小米手机上 ,点击表情 输入不进时 键盘立刻跳回默认页。
EditText 集锦 - 开发中常用的用法及遇到的各种坑

前言 EditText ,文本输入框,一个再熟悉不过的的控件,在开发当中,我们需要经常用到。这边文章,主要是记录 EditText 的常用用法,需要的时候可以直接复制张贴,提高效率。同时,本文章会持...

xujun9411
02/21
0
0
Android的TextView使用Html来处理图片显示、字体样式、超链接等

一、[Android实例]实现TextView里的文字有不同颜色 转eoe:http://www.eoeandroid.com/thread-4496-1-1.html 二、TextView显示html文件中的图片 转javaeye:http://da-en.javaeye.com/blog/7......

鉴客
2011/10/28
15.3K
3
Android开发之EditText属性详解

1、EditText输入的文字为密码形式的设置 (1)通过.xml里设置: 把该EditText设为:android:password="true" // 以”.”形式显示文本 (2)在代码里设置: 通过设置EditText的setTransformation...

的书法上的
2014/07/28
254
0
【OSC手机App技术解析】- 编辑框插入表情图片

众所周知,APP应用中带有表情功能,可以更好的提高用户体验。OSChina.NET Android版客户端v1.6 也加入表情功能,借此机会也给大家分享一下Android的编辑框是如何插入表情图片的,欢迎大家一起...

迷途d书童
2012/08/21
3.2K
2
极光征文 | 如何实现Emoji表情的推送😆

在开发中难免有些奇葩的需求。正常使用极光推送的都知道,是通过后端直接推字符串,或者json数据 首先在推送前要和后端约定好。 比如以这个表情为例 😀 数据格式1:(UTF-8编码) 数据格式...

八怪不姓丑
01/10
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Spring Boot + Mybatis-Plus 集成与使用(二)

前言: 本章节介绍MyBatis-Puls的CRUD使用。在开始之前,先简单讲解下上章节关于Spring Boot是如何自动配置MyBatis-Plus。 一、自动配置 当Spring Boot应用从主方法main()启动后,首先加载S...

伴学编程
昨天
7
0
用最通俗的方法讲spring [一] ──── AOP

@[TOC](用最通俗的方法讲spring [一] ──── AOP) 写这个系列的目的(可以跳过不看) 自己写这个系列的目的,是因为自己是个比较笨的人,我曾一度怀疑自己的智商不适合干编程这个行业.因为在我...

小贼贼子
昨天
7
0
Flutter系列之在 macOS 上安装和配置 Flutter 开发环境

本文为Flutter开发环境在macOS下安装全过程: 一、系统配置要求 想要安装并运行 Flutter,你的开发环境需要最低满足以下要求: 操作系统:macOS(64位) 磁盘空间:700 MB(不包含 IDE 或其余...

過愙
昨天
6
0
OSChina 周六乱弹 —— 早上儿子问我他是怎么来的

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @凉小生 :#今日歌曲推荐# 少点戾气,愿你和这个世界温柔以待。中岛美嘉的单曲《僕が死のうと思ったのは (曾经我也想过一了百了)》 《僕が死の...

小小编辑
昨天
2.7K
16
Excption与Error包结构,OOM 你遇到过哪些情况,SOF 你遇到过哪些情况

Throwable 是 Java 中所有错误与异常的超类,Throwable 包含两个子类,Error 与 Exception 。用于指示发生了异常情况。 Java 抛出的 Throwable 可以分成三种类型。 被检查异常(checked Exc...

Garphy
昨天
42
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部