Как установить несколько типов ввода в EditText на Android?

Я пытаюсь создать EditText с автоматической капитализацией и автоматической коррекцией. Я вручную выяснил, как добавить InputFilter, чтобы разрешить автокапитализацию, хотя это работает только после ввода первой буквы, и мне не повезло с автоматической коррекцией (я попытался создать 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.

Edit

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

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

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

Ответ 1

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

android:inputType="textMultiLine|textNoSuggestions"

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

Ответ 2

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

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

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

Ответ 3

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

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

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)