安卓 edittext禁止表情图片的输入
2016-04-26 17:48
274 查看
注释掉的是过滤表情符号的代码,有需要过滤表情符号的可以把注释去掉
package com.goldgov.otms.util;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import android.text.Editable;
import android.text.InputFilter;
import android.text.Spanned;
import android.text.TextWatcher;
import android.widget.EditText;
public class EdittextListener implements TextWatcher {
// 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;
EditText contentEd;
public EdittextListener(EditText contentEd) {
this.contentEd = contentEd;
contentEd.setFilters(new InputFilter[] { emojiFilter });
}
@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();
// ToastUtil.showMsg("不支持表情输入");
// }
// }
// } 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) {
}
InputFilter emojiFilter = new InputFilter() {
Pattern emoji = Pattern
.compile(
"[\ud83c\udc00-\ud83c\udfff]|[\ud83d\udc00-\ud83d\udfff]|[\u2600-\u27ff]",
Pattern.UNICODE_CASE | Pattern.CASE_INSENSITIVE);
@Override
public CharSequence filter(CharSequence source, int start, int end,
Spanned dest, int dstart, int dend) {
Matcher emojiMatcher = emoji.matcher(source);
if (emojiMatcher.find()) {
return "";
}
return null;
}
};
}
package com.goldgov.otms.util;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import android.text.Editable;
import android.text.InputFilter;
import android.text.Spanned;
import android.text.TextWatcher;
import android.widget.EditText;
public class EdittextListener implements TextWatcher {
// 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;
EditText contentEd;
public EdittextListener(EditText contentEd) {
this.contentEd = contentEd;
contentEd.setFilters(new InputFilter[] { emojiFilter });
}
@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();
// ToastUtil.showMsg("不支持表情输入");
// }
// }
// } 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) {
}
InputFilter emojiFilter = new InputFilter() {
Pattern emoji = Pattern
.compile(
"[\ud83c\udc00-\ud83c\udfff]|[\ud83d\udc00-\ud83d\udfff]|[\u2600-\u27ff]",
Pattern.UNICODE_CASE | Pattern.CASE_INSENSITIVE);
@Override
public CharSequence filter(CharSequence source, int start, int end,
Spanned dest, int dstart, int dend) {
Matcher emojiMatcher = emoji.matcher(source);
if (emojiMatcher.find()) {
return "";
}
return null;
}
};
}
相关文章推荐
- php结合安卓客户端实现查询交互实例
- 安卓输入框被虚拟键盘挡住的问题(微信开发)
- Android安卓中循环录像并检测内存卡容量
- 在安卓系统中插入表情到光标位置的代码详解
- Almp 安卓系统上搭建本地php服务器环境的步骤
- 谷歌被屏蔽后如何搭建安卓环境
- 安卓APP测试之使用Burp Suite实现HTTPS抓包方法
- 安卓(Android)聊天机器人实现代码分享
- Android中Fragment的生命周期与返回栈的管理
- 分享一个安卓的内置多种工具类的Activity
- 安卓系统中实现摇一摇画面振动效果的方法
- java实现获取安卓设备里已安装的软件包
- 安卓(Android)中如何实现滑动导航
- 六款值得推荐的android(安卓)开源框架简介
- 关于安卓so的兼容性的简单说明
- android(安卓)开源框架——六款【转】
- java.lang.NoClassDefFoundError: org.apache.axis.cl
- 开发阶段总结