如何以编程方式限制大写字母在android中输入?

时间:2010-08-23 11:05:43

标签: android android-activity

我想通过表格上的键盘限制大写字母输入。

任何人都指导我如何实现这个目标?

2 个答案:

答案 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以约束可以对其进行的更改。