我有一个EditText,我不希望允许任何特殊字符,因为我将此String存储在SQLlite数据库中。现在我使用:
<item name="android:digits">abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789</item>
这适用于英语。但是,当我将键盘切换为其他语言(日语,俄语,印地语等)时,我无法输入任何内容。这样做的正确方法是什么?
另外:
我正在使用ContentProvider访问我的SQLite数据库。所以我有从数据库读取/写入的方法
context.getContentResolver().insert(uri, values);
context.getContentResolver().delete(uri, values);
context.getContentResolver().query(uri, values); //for a special case, but only uses id=? in the query
context.getContentResolver().update(uri, values);
所以我需要逃避特殊角色吗?
答案 0 :(得分:0)
//try to add this fillter
InputFilter[] filters = new InputFilter[1];
filters[0] = new InputFilter() {
public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {
if (end > start) {
String destTxt = dest.toString();
String resultingTxt = destTxt.substring(0, dstart) + source.subSequence(start, end) + destTxt.substring(dend);
if (!resultingTxt.matches("[a-zA-Z0-9?]*")) {
if (source instanceof Spanned) {
SpannableString sp = new SpannableString("");
return sp;
} else {
return "";
}
}
}
return null;
}
};
edtiText.setFilters(filters);
答案 1 :(得分:0)
我知道回答你的问题有点晚了,但也许这有助于未来的某些人。
你需要的是像Haresh的答案这样的过滤器,但修改常规表达式,如:
private InputFilter filter = new InputFilter() {
@Override
public CharSequence filter(CharSequence src, int start, int end, Spanned dest, int dstart, int dend) {
if(src.toString().matches("[\\p{Alnum}]*")){
return src;
}
return "";
}
};
如果您不想在editText中输入数字,请更改
"[\\p{Alnum}]*"
用这个
"[\\p{Alpha}]*"
如果您需要更具体的内容,请查看此link:
PD:我在我的应用程序中使用了这个代码,支持英语,西班牙语和法语,并且它的工作正常。我希望这可以帮助别人!