android edittext 限制输入符号表情

来源:互联网 发布:淘宝有什么奇怪的东西 编辑:程序博客网 时间:2024/04/29 21:46

edittext 限制输入符号表情((⊙o⊙)… ( ⊙ o ⊙:像这样的符号表情)


m_inputNickname.addTextChangedListener(watcher);

private final String reg ="^([a-z]|[A-Z]|[0-9]|[\u2E80-\u9FFF]){3,}|@(?:[\\w](?:[\\w-]*[\\w])?\\.)+[\\w](?:[\\w-]*[\\w])?|[wap.]{4}|[www.]{4}|[blog.]{5}|[bbs.]{4}|[.com]{4}|[.cn]{3}|[.net]{4}|[.org]{4}|[http://]{7}|[ftp://]{6}$";private Pattern pattern = Pattern.compile(reg);//输入表情前的光标位置private int cursorPos;//输入表情前EditText中的文本private String tmp;//是否重置了EditText的内容private boolean resetText;private TextWatcher watcher = new TextWatcher() {    @Override    public void onTextChanged(CharSequence s, int start, int before, int count) {        if(!resetText){            if(count >= 3){//表情符号的字符长度最小为3                //提取输入的长度大于3的文本                CharSequence input = s.subSequence(cursorPos, cursorPos + count);                //正则匹配是否是表情符号                Matcher matcher = pattern.matcher(input.toString());                if(!matcher.matches()){                    resetText = true;                    //是表情符号就将文本还原为输入表情符号之前的内容                    m_inputNickname.setText(tmp);                    m_inputNickname.invalidate();                    Toast.makeText(UserModifyNNActivity.this,                            "不支持表情输入", Toast.LENGTH_SHORT).show();                }            }        }else{            resetText = false;        }    }    @Override    public void beforeTextChanged(CharSequence s, int start, int count, int after) {        if(!resetText){            cursorPos = m_inputNickname.getSelectionEnd();            tmp = s.toString();//这里用s.toString()而不直接用s是因为如果用s,那么,tmp和s在内存中指向的是同一个地址,s改变了,tmp也就改变了,那么表情过滤就失败了        }    }    @Override    public void afterTextChanged(Editable s) {    }};

原文来自。。。找不到链接了,找到再加上

0 0