在之前的android开发中,碰到需要限制EditText中特殊字符的输入和字符长度限制并提示问题。同样这些开发并不难,很快完成了,不过后来给我起了一个Bug“当第一次输入长度达到上限100时给出了提示,达到上限后再次输入没能再次给出提示”。为了解决这个问题,这里经过实践总结,给出一个方案:

mEditText.addTextChangedListener(new TextWatcher() {

@Override

public void onTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) {

// TODO Auto-generated method stub

String editable = mEditText.getText().toString();

String str = stringFilter(editable);

//过滤输入无效字符并提示

if (!editable.equals(str)) {

Toast.makeText(this, R.string.invalid_character,

Toast.LENGTH_LONG).show();

mEditText.setText(str);

}

}

@Override

public void beforeTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) {

// TODO Auto-generated method stub

}

@Override

public void afterTextChanged(Editable editable) {

//設置最大輸入長度100,並提示達到輸入上限

if (editable.toString().length() > 100) {

Toast.makeText(this,R.string.max_character,

Toast.LENGTH_SHORT).show();

//删除超出100长度部分的字符

editable.delete(mEditText.getSelectionStart() - 1,

mEditText.getSelectionEnd());

}

}

});

// 设置过滤字符函数(过滤掉我们不需要的字符)

public static String stringFilter(String str) throws PatternSyntaxException {

//定义一个无效字符的正则表达式

String regEx = "[/\\:*?<>|\"]";

//生成Pattern对象并且编译一个正则表达式regEx

Pattern p = Pattern.compile(regEx);

//用Pattern类的matcher()方法生成一个Matcher对象

Matcher m = p.matcher(str);

//如果输入为无效字符则替代为""

return m.replaceAll("");

} 这里的解决办法是当输入长度超过100时便会给出提示,并删除超出部分,这样效果来看EditText的最大长度还是100,并且子后再次输入都会给出提示达到上限。

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐