Как убрать автофокус / всплывающее окно клавиатуры в поле, когда появляется экран?


105

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

Как я могу убедиться, что при запуске действия фокус не получается и / или панель ввода не поднимается?

Ответы:


157
InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(editTextField.getWindowToken(), 0);

или

установить свойство активности в файле манифеста, как показано ниже в теге приложения

android:windowSoftInputMode="stateHidden"

Установка android: windowSoftInputMode в файле AndroidManifest.xml может быть объединена с другими значениями. Режим обычно подразумевает одиночные значения, но в этом случае значение представляет собой набор флагов. Описание ценностей:Formats: flag Values: adjustNothing, adjustPan, adjustResize, adjustUnspecified, stateAlwaysHidden, stateAlwaysVisible, stateHidden, stateUnchanged, stateUnspecified, stateVisible Specify the default soft-input mode for the main window of this activity. A value besides "unspecified" here overrides any value in the theme.
Джефф Мьюир

145

перейдите в файл манифеста вашего приложения и напишите эту строку для того действия, которое вы хотите отключить автоматическое всплывающее окно клавиатуры.

android:windowSoftInputMode="stateHidden"

У меня не сработало. Я положил его в activity_main.xml. Это сработало отлично, когда я вставил его в onCreate (). getWindow (). setSoftInputMode (WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);
glez

20

Чтобы программно не отображалась клавиатура, но виджет по умолчанию все еще принимал вызов фокуса:

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

в onResume()


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

вызовите указанный выше метод внутри onCreate (). Это предотвратит отображение softKeyboard, если пользователь не выберет EditText с помощьюtapping or clicking.

или просто добавьте android:windowSoftInputMode="stateHidden"тег активности вManifest.xml


10

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

<TextView
  ...
  android:focusable="true"
  android:focusableInTouchMode="true">

    <requestFocus/>
</TextView>

Это работает. Я считаю, что это более чистый подход, но он также зависит от ваших условий. Я принимаю это.
JaydeepW

5

Сделайте еще один вид, чтобы сфокусироваться. По умолчанию первый вид с фокусировкой получает фокус, когда макет раздувается. Вы можете запросить фокус на другом представлении через XML:

<TextView
    android:layout_width="wrap_parent"
    android:layout_height="wrap_content"
    android:text="Some other view">

    <requestFocus />
</TextView>

Это работает для любого просмотра.

Если вы хотите сделать это программно, вы можете использовать view.requestFocus().


0
if(getWindow().getAttributes().softInputMode==WindowManager.LayoutParams.SOFT_INPUT_STATE_UNSPECIFIED)
{
    getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);
}

3
Добро пожаловать в StackOverflow! Это не похоже на другие форумы. Если вы хотите изменить свой ответ, просто нажмите editссылку и внесите свои изменения. И, пожалуйста, попробуйте отформатировать свой код, выбрав его и используя кнопку Образец кода {}или нажав Ctrl+K.
Питер Ланг

0

Добавление android:windowSoftInputMode="stateHidden"к вашему Activity в манифесте скрывает клавиатуру только тогда, когда вы запускаете действие, или, как говорит Google

Когда пользователь утвердительно переходит к действию, а не возвращается к нему из-за того, что покинул другое действие

Чтобы скрыть клавиатуру также, когда пользователь нажимает кнопку возврата и возвращается к вашему действию из другого действия, используйте android:windowSoftInputMode="stateAlwaysHidden"


-1

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


1
Я пробовал это, но не работает. Я нажал .requestFocus();кнопку, а клавиатура все еще всплывает.
Pentium10

мысли могут быть добавлены в качестве комментариев
Alberto M
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.