输入修改姓名时候,只能输入汉字,字母,数字,并且最长只能输入16个字符,数字字母算一个字符,汉字算两个字符
重写EditText对单次输入的内容进行拦截判断
public class LimitEditText extends EditText {
public LimitEditText(Context context) {
super(context);
}
public LimitEditText(Context context, AttributeSet attrs) {
super(context, attrs);
}
public LimitEditText(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
// this.addTextChangedListener(this);
}
/**
* 输入法
* @param outAttrs
* @return
*/
@Override
public InputConnection onCreateInputConnection(EditorInfo outAttrs) {
return new mInputConnecttion(super.onCreateInputConnection(outAttrs),
false);
}
private int count;
class mInputConnecttion extends InputConnectionWrapper implements
InputConnection {
public mInputConnecttion(InputConnection target, boolean mutable) {
super(target, mutable);
}
/**
* 对输入的内容进行拦截
*
* @param text
* @param newCursorPosition
* @return
*/
@Override
public boolean commitText(CharSequence text, int newCursorPosition) {
// 只能输入汉字
if (!text.toString().matches("[\u4e00-\u9fa5]+") && !text.toString().matches("[a-zA-Z]+")&&!text.toString().matches("[0-9]")) {
ToastUtil.ToastShow(getContext(),"只能输入数字和字母和汉字");
return false;
}
tips(text.toString());
if(count>16){
ToastUtil.ToastShow(getContext(),"最多16个字符");
return false;
}
return super.commitText(text, newCursorPosition);
}
private void tips (String append){
count=0;
String text=getText().toString();
for (int i=0;i<text.length();i++){
String a=String.valueOf(text.charAt(i));
if(a.matches("[\u4e00-\u9fa5]+")){
count=count+2;
}
else{
count=count+1;
}
}
for (int i=0;i<append.length();i++){
String a=String.valueOf(append.charAt(i));
if(a.matches("[\u4e00-\u9fa5]+")){
count=count+2;
}
else{
count=count+1;
}
}
}
@Override
public boolean sendKeyEvent(KeyEvent event) {
return super.sendKeyEvent(event);
}
@Override
public boolean setSelection(int start, int end) {
return super.setSelection(start, end);
}
}
}
提交时候正则判断,只能有数字字母汉字
public boolean intputName(String name) {
Pattern compile = Pattern.compile("[a-zA-Z0-9\u4e00-\u9fa5]*");
Matcher matcher = compile.matcher(name);
if (matcher.matches()) {
return true;
} else {
return false;
}
}
奇葩需求天天有