您的位置:首页 > 其它

禁止在EditText中输入表情及表情符号的方法

2013-06-03 02:24 585 查看
//匹配非表情符号的正则表达式
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) {
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: