import android.text.Editable; import android.text.TextWatcher; import android.widget.EditText; import android.widget.Toast; import com.taihe.mplus.util.L; import java.util.regex.Matcher; import java.util.regex.Pattern; /** * @outher 孙磊磊 * create at 2016/2/23 17:38 * description 表情过滤 */ public class ValidCharacterListener implements TextWatcher { TextWatcher mListener; EditText editText; //匹配非表情符号的正则表达式 // private final String reg="^[0-9A-Za-z\u4e00-\u9fa50~·!@#¥%……&*()“”‘’:;《》?,。、<>?/.,';\":\\|~`!@#$%^&*()+-=_]*$"; private final String reg = "^[\u4e00-\u9fa5\u0020-\u007E\uFE30-\uFFA0。、……“”‘’《》——¥~]*$"; private Pattern pattern = Pattern.compile(reg); //输入表情前的光标位置 private int cursorPos; //输入表情前EditText中的文本 private String tmp; //是否重置了EditText的内容 private boolean resetText; @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { if (mListener != null) mListener.beforeTextChanged(s, start, count, after); if (!resetText) { cursorPos = editText.getSelectionEnd(); tmp = s.toString();//这里用s.toString()而不直接用s是因为如果用s,那么,tmp和s在内存中指向的是同一个地址,s改变了,tmp也就改变了,那么表情过滤就失败了 } } @Override public void onTextChanged(CharSequence s, int start, int before, int count) { if (mListener != null) mListener.onTextChanged(s, start, before, count); if(count>=0) if (!resetText) { // CharSequence input = s.subSequence(cursorPos, cursorPos + count); //正则匹配是否是表情符号 Matcher matcher = pattern.matcher(s.toString()); if (!matcher.matches()) { resetText = true; //是表情符号就将文本还原为输入表情符号之前的内容 editText.setText(tmp); editText.setSelection(cursorPos); editText.invalidate(); } } else { resetText = false; } } @Override public void afterTextChanged(Editable s) { if (mListener != null) mListener.afterTextChanged(s); } public ValidCharacterListener setEditText(EditText editText) { this.editText = editText; editText.addTextChangedListener(this); tmp = editText.getText().toString(); return this; } public ValidCharacterListener addListener(TextWatcher listener) { this.mListener = listener; return this; } }
EditText 表情符号过滤
最新推荐文章于 2024-07-10 13:50:58 发布