Как отключить Android Soft Keyboard для определенной активности?

У меня есть активность с одним EditText, где мне нужно только ввести цифры.

Теперь я определил тип ввода для моего EditText только для числа и нарисовал красивую клавиатуру для моего пользователя, однако я также должен убедиться, что программная клавиатура не появляется у моего пользователя, когда они нажимают на EditText.

Я попытался скрыть клавиатуру через манифест, добавив

android:windowSoftInputMode="stateAlwaysHidden"

в моем манифесте для конкретной деятельности, но это не работает для меня, потому что, как только пользователь нажимает на EditText, клавиатура появляется снова.

Я пытался сделать то же самое программно, как это

activity.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);

но это тоже не работает. Клавиатура появляется, когда пользователь нажимает на EditText.

Единственное, что сработало, это установило для InputType значение NULL для EditText следующим образом:

EditText.setInputType(InputType.TYPE_NULL);

но я не могу использовать это, потому что это позволит пользователям, к которым подключена клавиатура, вводить буквы и другие символы в поле EditText, в то время как я хочу, чтобы все специально использовали только клавиатуру для ввода данных в поле.

Я должен также упомянуть, что в настоящее время я тестирую свое приложение под Android 2.1, но я бы хотел, чтобы мое решение работало во всех версиях. Любая помощь будет оценена. Заранее спасибо.

6 ответов

Решение

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

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

В любом редактируемом тексте вам нужно отключить программную клавиатуру, добавить атрибут в xml этого текста редактирования.

<EditText android:id=".."
          ..
          android:focusable="false" />

Это остановит выполнение программной клавиатуры.

Вы можете попробовать это. Это работает для меня:

getWindow().setFlags(WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM,
                     WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM);

Использовать android:windowSoftInputMode="stateHidden" в вашей деятельности в файле манифеста. Это будет работать Не используйте android:focusable="false" для EditText, если только вы не хотите вводить текст. Если вы хотите ввести данные, удалите это свойство для текста редактирования в файле макета.

Если вы используете, например, ViewGroup, он позволяет заблокировать программную клавиатуру, используя этот метод:

view.setDescendantFocusability(view.FOCUS_BLOCK_DESCENDANTS);

Благодаря этому представление получит фокус перед любым из его потомков.

Вы можете использовать этот код:

<EditText
    .
    .
    android:enabled="false"
    android:focusable="false"
    android:focusableInTouchMode="false"
    android:inputType="numberPassword" />
Другие вопросы по тегам