Как установить несколько типов ввода в EditText на Android? - PullRequest
10 голосов
/ 19 марта 2012

Я пытаюсь создать EditText с автокапитализацией и автокоррекцией.Я вручную выяснил, как добавить InputFilter s, чтобы разрешить автокапитализацию, хотя это работает только после , когда набирается первая буква, и мне не повезло с автокоррекцией (я пытался создатьInputFilter, который использовал AutoText, но я не уверен, как все это работает).В идеале я мог бы просто использовать EditText.setInputType (...) для обработки всего, но пока это не сработало.Есть ли способ добиться этого?Моя неудачная попытка показана ниже (я просто получаю нормальный ввод).

EditText mEditText = new EditText(this);
int inputType = InputType.TYPE_CLASS_TEXT;
if (auto_capitalize) {
    inputType = mEditText.getInputType() | InputType.TYPE_TEXT_FLAG_CAP_CHARACTERS;
}
if (auto_correct) {
    inputType = mEditText.getInputType() | InputType.TYPE_TEXT_FLAG_AUTO_CORRECT;
}
mEditText.setInputType(inputType);

Обратите внимание, меня интересуют только решения для создания этого EditText в коде, а не через XML.

Редактировать

Я нашел новую документацию, описывающую TextKeyListener , однако после попытки использовать это:

mEditText.setKeyListener(new TextKeyListener(TextKeyListener.Capitalize.CHARACTERS, true));

и используя @ farble1670 идею использования setRawInputType, чтобы не влиять на KeyListener s, в тексте по-прежнему нет изменений.

Ответы [ 3 ]

34 голосов
/ 19 апреля 2013

Через XML это будет настроено так.

android:inputType="textMultiLine|textNoSuggestions"

Вы просто добавляете канал (|) между переменными.Я вижу, вы делали это с помощью кода, но я просто добавил это для справки.

7 голосов
/ 23 мая 2013

Надеюсь, вы нашли ответ на вопрос.Ответ может помочь тем, кто придет к теме позже.Таким образом, вы можете установить несколько тегов таким же образом, как и в XML, используя | (труба).Что-то вроде:

EditText mEditText = new EditText(this);
mEditText.setInputType(InputTpe.TYPE_TEXT_FLAG_CAP_CHARACTERS|InputType.TYPE_TEXT_FLAG_AUTO_CORRECT);

Кроме того, в зависимости от вашей ситуации вы можете использовать setInputType или setRawInputype.

3 голосов
/ 19 марта 2012

да, похоже, это должно работать.однако, глядя на документы,

Тип данных, помещаемых в текстовое поле, используется, чтобы помочь методу ввода решить, как разрешить пользователю вводить текст.Константы здесь соответствуют тем, которые определены InputType.Как правило, вы можете выбрать одно значение, хотя некоторые могут быть объединены вместе, как указано.Установка этого атрибута на что угодно, кроме none, также подразумевает, что текст редактируемый.

http://developer.android.com/reference/android/widget/TextView.html#attr_android:inputType

, так что в общем случае вы не можете ожидать установки двух значений.Приведенная выше ссылка показывает, какие флаги можно объединить.

также, если вы посмотрите на android: setInputType, он говорит, что это соответствует методу setRawInputType (), а не setInputType ().Вы можете попробовать вызвать setRawInputType () вместо setInputType ().

http://developer.android.com/reference/android/widget/TextView.html#setRawInputType(int)

...