禁止在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) {
}
};
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中输入表情及表情符号的方法
- EditText限制输入字数,并且禁止输入表情符号
- EditText中禁止输入中文的方法及长度限制
- android同时控制EditText输入字符个数和禁止特殊字符输入的方法
- android 输入框EditText禁止输入表情符
- 如何使EditText禁止输入表情
- 自定义EditText禁止输入表情
- Android中EditText禁止输入表情
- Android中实现Edittext中输入表情图片的方法
- Android实现EditText控件禁止输入内容的方法(附测试demo)
- 限制EditText 输入Emjoy 表情符号
- EditText中禁止输入中文的方法
- Android中EditText禁止输入表情的实例代码
- editText限制输入字符长度,禁止输入表情,清除输入文字的按钮
- Android编程开发之EditText实现输入QQ表情图像的方法
- android同时控制EditText输入字符个数和禁止特殊字符输入的方法
- iOStextfield 限制输入字符长度和过滤表情符号 - CSDN.NET
- android 判断EditText中输入的值是数字、字母还是汉字的方法
- 【Android】【输入校验】输入框(EditText)过滤 Emoji 表情
- EditText禁止输入表情符号