Как отключить Android Soft Keyboard для определенной активности? - PullRequest
10 голосов
/ 02 мая 2011

У меня есть действие с одним 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 ]

6 голосов
/ 22 ноября 2012

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

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

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

6 голосов
/ 03 мая 2011

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

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

3 голосов
/ 14 февраля 2013

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

0 голосов
/ 09 августа 2018

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

getWindow().setFlags(WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM,
                     WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM);
0 голосов
/ 13 декабря 2017

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

<EditText
    .
    .
    android:enabled="false"
    android:focusable="false"
    android:focusableInTouchMode="false"
    android:inputType="numberPassword" />
0 голосов
/ 27 мая 2013

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

view.setDescendantFocusability(view.FOCUS_BLOCK_DESCENDANTS);

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

...