Как отключить 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" />