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

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


person Phil    schedule 19.03.2012    source источник


Ответы (3)


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

android:inputType="textMultiLine|textNoSuggestions"

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

person f1vefour    schedule 18.04.2013
comment
в моем вопросе конкретно указано, что меня не интересует решение XML. - person Phil; 19.04.2013
comment
Я нашел ваш вопрос во время поиска, я помещал решение XML для следующего человека, который найдет это, но искал решение XML, как и я.... - person f1vefour; 21.04.2013

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

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

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

person Shobhit Puri    schedule 23.05.2013

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

Тип данных, помещаемых в текстовое поле, используемый, чтобы помочь методу ввода решить, как разрешить пользователю вводить текст. Константы здесь соответствуют тем, которые определены 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)

person Jeffrey Blattman    schedule 19.03.2012
comment
Спасибо, это заставило меня двигаться в новом направлении, и я нашел TextKeyListener. Единственное - это тоже не работает... - person Phil; 19.03.2012