et_content.addTextChangedListener(watcher);
et_content.setOnEditorActionListener(new OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView v, int actionId,
KeyEvent event) {
if (actionId == EditorInfo.IME_ACTION_UNSPECIFIED) {
return true;
}
return false;
}
});
//输入表情前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){
String regEx="[`~!@#$%^&*()+=|{}':;',\\[\\].<>/?~!@#¥%……&*()——+|{}【】‘;:”“’。,、?]";
Pattern p = Pattern.compile(regEx);
Matcher m = p.matcher(s.toString());
if( m.find()){
et_content.setText(tmp);
et_content.invalidate();
Toast.makeText(YiJianFanKuiActivity.this, "不允许输入特殊符号!", Toast.LENGTH_LONG).show();
}
}else{
resetText = false;
}
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
if(!resetText){
tmp = s.toString();//这里用s.toString()而不直接用s是因为如果用s,那么,tmp和s在内存中指向的是同一个地址,s改变了,tmp也就改变了,那么表情过滤就失败了
}
}
@Override
public void afterTextChanged(Editable s) {
Editable etext = et_content.getText();
Selection.setSelection(etext, etext.length());
}
};