我想通过表格上的键盘限制大写字母输入。
任何人都指导我如何实现这个目标?
答案 0 :(得分:4)
源代码:
InputFilter smallFilter = new InputFilter() {
@Override
public CharSequence filter(CharSequence source, int start, int end,
Spanned dest, int dstart, int dend) {
for (int i = start; i < end; i++) {
if (Character.isUpperCase(source.charAt(i))) {
char[] v = new char[end - start];
TextUtils.getChars(source, start, end, v, 0);
String s = new String(v).toLowerCase();
if (source instanceof Spanned) {
SpannableString sp = new SpannableString(s);
TextUtils
.copySpansFrom((Spanned) source, start, end, null, sp, 0);
return sp;
} else {
return s;
}
}
}
return null;
}
};
EditText vText = ...;
vText.setFilters(new InputFilter[]{smallFilter});
它基于Android的源码:InputFilter.AllCaps。经过测试和工作。
答案 1 :(得分:1)
首先,你的目标是什么?你为什么要限制大写字母?您无法在验证用户输入时使用它们并使用 toLowerCase()
如果你确实需要限制大写字母,我能想到的唯一方法是覆盖onTextChanged(CharSequence text, int start, int before, int after)并尝试在其中做任何你想做的事情。我没有测试过,但它可能会有用。
更新:radek提到InputFilter。这个解决方案似乎比我的更清洁,但我从未使用它们。
可以将InputFilters附加到Editables以约束可以对其进行的更改。