安卓 edittext禁止表情图片的输入

本文介绍了一个用于Android平台的EditText监听器实现,该监听器能够有效过滤用户输入中的表情符号,通过使用正则表达式匹配并阻止这些特殊字符的输入。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

注释掉的是过滤表情符号的代码,有需要过滤表情符号的可以把注释去掉


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;
}
};
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值