Как ограничить ввод заглавных букв в Android программно? - PullRequest
2 голосов
/ 23 августа 2010

Я хочу ограничить ввод заглавных букв с помощью клавиатуры в форме.

Кто-нибудь подскажет, как этого добиться?

Ответы [ 2 ]

4 голосов
/ 23 августа 2010

В исходном коде:

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 голос
/ 23 августа 2010

Во-первых, какова ваша цель?Почему вы хотите ограничить заглавные буквы?Разве вы не можете позаботиться о них при проверке пользовательского ввода и использовать toLowerCase ()

Если вам нужно ограничить использование заглавных букв, я могу думать только о переопределении onTextChanged (CharSequence text, int start, int before, int after) и пытается делать внутри него все, что вы хотите.Я не тестировал его, но он может работать.

Обновление: radek упомянул InputFilter .Эти решения кажутся более чистыми, чем мои, но я никогда не использовал их.

InputFilters могут быть присоединены к Editables, чтобы ограничить изменения, которые могут быть внесены в них.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...