禁止在EditText中输入表情及表情符号的方法
Posted zjzjt
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了禁止在EditText中输入表情及表情符号的方法相关的知识,希望对你有一定的参考价值。
//匹配非表情符号的正则表达式
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;
//是表情符号就将文本还原为输入表情符号之前的内容
contentEd.setText(tmp);
contentEd.invalidate();
Toast.makeText(ShareInstantActivity.this,
"不支持表情输入", Toast.LENGTH_SHORT).show();
else
resetText = false;
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after)
if(!resetText)
cursorPos = contentEd.getSelectionEnd();
tmp = s.toString();//这里用s.toString()而不直接用s是因为如果用s,那么,tmp和s在内存中指向的是同一个地址,s改变了,tmp也就改变了,那么表情过滤就失败了
@Override
public void afterTextChanged(Editable s)
;
以上是关于禁止在EditText中输入表情及表情符号的方法的主要内容,如果未能解决你的问题,请参考以下文章