匹配emoji
2016-03-24 16:32
330 查看
edittext.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before,
int count) {
setEditTextStyle();
if (count >= 2) {// 表情符号的字符长度最小为2
CharSequence input = s.subSequence(cursorPos, cursorPos
+ count);
if (Helper.containsEmoji(input.toString())) {
}
}
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
cursorPos = et_barrage.getSelectionEnd();
}
@Override
public void afterTextChanged(Editable s) {
}
});
/**
* 检测是否有emoji表情
*
* @param source
* @return
*/
public static boolean containsEmoji(String source) {
int len = source.length();
for (int i = 0; i < len; i++) {
char codePoint = source.charAt(i);
if (!isEmojiCharacter(codePoint)) { // 如果不能匹配,则该字符是Emoji表情
return true;
}
}
return false;
}
/**
* 判断是否是Emoji
*
* @param codePoint
* 比较的单个字符
* @return
*/
private static boolean isEmojiCharacter(char codePoint) {
return (codePoint == 0x0) || (codePoint == 0x9) || (codePoint == 0xA)
|| (codePoint == 0xD)
|| ((codePoint >= 0x20) && (codePoint <= 0xD7FF))
|| ((codePoint >= 0xE000) && (codePoint <= 0xFFFD))
|| ((codePoint >= 0x10000) && (codePoint <= 0x10FFFF));
}
字数限制设置:
editText.setFilters(new InputFilter[]{newInputFilter.LengthFilter(100)});
@Override
public void onTextChanged(CharSequence s, int start, int before,
int count) {
setEditTextStyle();
if (count >= 2) {// 表情符号的字符长度最小为2
CharSequence input = s.subSequence(cursorPos, cursorPos
+ count);
if (Helper.containsEmoji(input.toString())) {
}
}
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
cursorPos = et_barrage.getSelectionEnd();
}
@Override
public void afterTextChanged(Editable s) {
}
});
/**
* 检测是否有emoji表情
*
* @param source
* @return
*/
public static boolean containsEmoji(String source) {
int len = source.length();
for (int i = 0; i < len; i++) {
char codePoint = source.charAt(i);
if (!isEmojiCharacter(codePoint)) { // 如果不能匹配,则该字符是Emoji表情
return true;
}
}
return false;
}
/**
* 判断是否是Emoji
*
* @param codePoint
* 比较的单个字符
* @return
*/
private static boolean isEmojiCharacter(char codePoint) {
return (codePoint == 0x0) || (codePoint == 0x9) || (codePoint == 0xA)
|| (codePoint == 0xD)
|| ((codePoint >= 0x20) && (codePoint <= 0xD7FF))
|| ((codePoint >= 0xE000) && (codePoint <= 0xFFFD))
|| ((codePoint >= 0x10000) && (codePoint <= 0x10FFFF));
}
字数限制设置:
editText.setFilters(new InputFilter[]{newInputFilter.LengthFilter(100)});
相关文章推荐
- Android系统关机或重启的几种实现方式
- C++重新学习心得(1)(《C++Primer第四版》1-8章)
- Exception_JDK安装Error opening registry key...
- 关于UITableView 刷新遇到的坑:"Invalid update"
- 高并发的几个解决方案
- angularjs结合plupload实现文件上传
- C基础知识(运算符优先级)
- Axure中事件、用例和动作之间的关系
- HTTPS学习笔记
- svn指令备忘录
- HTML标签自定义属性
- 用于应用程序状态同步的方法和设备
- 开启IMPDP导入时的trace日志
- C# 协变out 、逆变 in
- Java内存管理
- 操作系统面试题
- JS各种类型问题与隐式类型转换
- linux 查看文件内容的命令
- linux下I2C驱动架构全面分析
- 算法专项(1)——快速排序