Скрыть клавиатуру android java

Клавиатура и аппаратные кнопки

Аппаратные и клавиатурные клавиши

Обработка аппаратных клавиш и клавиатуры имеет следующие методы

  • onKeyDown() — вызывается при нажатии любой аппаратной клавиши;
  • onKeyUp() — вызывается при отпускании любой аппаратной клавиши;

Кроме клавиш, есть ещё другие методы обработки пользовательского ввода (здесь не рассматриваются):

  • onTrackballEvent() — срабатывает при движениях трекбола;
  • onTouchEvent() — обработчик событий сенсорного экрана, срабатывает при касании, убирания пальца и при перетаскивании.

Чтобы ваши компоненты и активности реагировали на нажатия клавиш, переопределите обработчики событий onKeyUp() и onKeyDown():

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

Параметр KeyEvent также включает в себя несколько методов: isAltPressed(), isShiftPressed() и isSymPressed(), определяющих, были ли нажаты функциональные клавиши, такие как Alt, Shift или Sym. Статический метод isModifierKey() принимает keyCode и определяет, является ли нажатая клавиша модификатором.

Кнопка Back: Вы уверены, что хотите выйти из программы?

Кнопка Back (Назад) закрывает приложение, точнее текущую активность, но если приложение состоит из одной активности, то это равносильно закрытию всего приложения. В большинстве случаев вам нет никакого дела до неуклюжего пользователя, который по ошибке нажал на кнопку «Back» вместо кнопки Подарить разработчику миллион. Но, если ваша программа, будучи запущенной на телефоне пользователя, потихоньку списывает деньги клиента в счёт Фонда голодных котов, то нужно дать ему шанс задуматься и вывести диалоговое окно с вопросом: «А действительно ли вы хотите выйти из программы?»

Чтобы реализовать такую задачу, нужно переопределить поведение кнопки «Back» через метод активности onBackPressed() следующим образом:

Данный метод появился в Android 2.0. Для более ранних версий использовался стандартный код обработки onKeyDown():

Двойное нажатие на кнопку Back

Другой вариант — выход из приложения при двойном нажатии на кнопку «Back». Удобно в тех случаях, когда считаете, что пользователь может случайно нажать на кнопку, например, во время активной игры. Приложение закроется, если пользователь дважды нажмёт на кнопку в течение двух секунд.

Кнопка Home

Можно отследить нажатие кнопки Home через метод активности onUserLeaveHint():

Обработка кнопки Menu

У телефона, кроме кнопки «Back», есть ещё кнопка «Menu» для вызова команд меню (на старых устройствах). Если необходимо обрабатывать нажатия этой кнопки (например, управление в игре), то используйте следующий код (обычное и долгое нажатие):

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

Другие кнопки

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

Обратите внимание, что для кнопки громкости возвращаем false, т.е. мы не переопределяем поведение кнопки, а оставляем её на усмотрение системы.

Пример работы с кнопками громкости можно посмотреть в статье Рингтоны. Управление громкостью

По такому же принципу работает метод onKeyUp(). Метод onKeyLongPress() можно использовать, если в методе onKeyDown() был задействован метод event.startTracking(), отслеживающий поведение кнопки. В нашем примере мы отслеживали кнопку Volume_Up.

Прячем клавиатуру

Бывает так, что при запуске активности сразу выскакивает клавиатура. Если такое поведение не нравится, то пропишите в манифесте нужное значение у атрибута android:windowSoftInputMode (см. ниже).

В некоторых случаях хочется убрать клавиатуру с экрана, не нажимая кнопку «Back», а программно. В одном моём приложении, где было много текстовых полей, я воспользовался следующим кодом при щелчке кнопки:

Код так выглядит, если писать его в Activity. Если расположить его в другом классе, экземпляр Activity нужно передать туда как параметр и вызывать методы как activity.getApplicationContext(), где activity — экземпляр Activity.

Можно избавить компонент от фокуса:

Чтобы принудительно показать клавиатуру, используйте следующий код:

Кстати, повторный вызов метода закроет клавиатуру. Указанный способ не требует наличия элементов View.

Если продолжить тему показа клавиатуры, то может возникнуть следующая ситуация. Допустим у вас есть DialogFragment с EditText. При выводе диалогового окна вам нужно установить фокус на EditText и показать клавиатуру:

Либо используйте тег для нужного EditText.

Изменить вид клавиатуры для EditText

Когда элемент EditText получает фокус, то появляется клавиатура. Можно установить нужный вид клавиатуры через атрибут InputType или программно через метод setInputType():

TYPE_CLASS_DATETIME — дата и время
TYPE_CLASS_NUMBER — цифры
TYPE_CLASS_TEXT — буквы

Переопределяем кнопку Enter

Кроме атрибута InputType можно также использовать атрибут android:imeOptions в компоненте EditText, который позволяет заменить кнопку Enter на клавиатуре на другие кнопки, например, Next, Go, Search и др. Возможны следующие значения:

  • actionUnspecified: Используется по умолчанию. Система сама выбирает нужный вид кнопки (IME_NULL)
  • actionGo: Выводит надпись Go. Действует как клавиша Enter при наборе адреса в адресной строке браузера (IME_ACTION_GO)
  • actionSearch: Выводит значок поиска (IME_ACTION_SEARCH)
  • actionSend: Выводит надпись Send (IME_ACTION_SEND)
  • actionNext: Выводит надпись Next (IME_ACTION_NEXT)
  • actionDone: Выводи надпись Done (IME_ACTION_DONE)

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

Чтобы реагировать на нажатия разных состояний кнопки Enter, необходимо реализовать интерфейс TextView.OnEditorActionListener. Небольшой пример:

В нашем примере если пользователь ищет что-то, не связанное с котом, то кнопка поиска не будет выполнять желание владельца устройства.

Также можно поменять текст на кнопке с помощью атрибута android:imeActionLabel:

Текст на кнопке поменялся, но вот обработка Enter из предыдущего примера у меня перестала работать. Мой неработающий код на память.

Upd: Читатель Максим Г. предложил следующее решение проблемы. Убираем атрибуты imeOptions, imeActionId, imeActionLabel и установим их программно.

По желанию можете отслеживать только у нужного поля. Поставьте дополнительное условие после первого блока if:

Интерфейс OnKeyListener

Чтобы среагировать на нажатие клавиши внутри существующего представления из активности, реализуйте интерфейс OnKeyListener и назначьте его для объекта View, используя метод setOnKeyListener(). Вместо того, чтобы реализовывать отдельные методы для событий нажатия и отпускания клавиш, OnKeyListener использует единое событие onKey().

Используйте параметр keyCode для получения клавиши, которая была нажата. Параметр KeyEvent нужен для распознавания типа события (нажатие представлено константой ACTION_DOWN, а отпускание — ACTION_UP).

Сдвигаем активность

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

Читайте также:  Bmw 5 series android

Также доступны и другие параметры:

  • stateUnspecified — настройка по умолчанию. Система сама выбирает подходящее поведение клавиатуры.
  • stateUnchanged — клавиатура сохраняет своё последнее состояние (видимое или невидимое), когда активность с текстовым полем получает фокус.
  • stateHidden — клавиатура скрыта, когда открывается активность. Клавиатура появится при наборе текста. Если пользователь переключится на другую активность, то клавиатура будут скрыта, но при возвращении назад клавиатура останется на экране, если она была видима при закрытии активности.
  • stateAlwaysHidden — клавиатура всегда скрывается, если активность получает фокус.
  • stateVisible — клавиатура видима.
  • stateAlwaysVisible — клавиатура становится видимой, когда пользователь открывает активность.
  • adjustResize — размеры компонентов в окне активности могут изменяться, чтобы освободить место для экранной клавиатуры.
  • adjustPan — окно активности и его компоненты не изменяются, а сдвигаются таким образом, чтобы текстовое поле с фокусом не было закрыто клавиатурой.
  • adjustUnspecified — настройка по умолчанию. Система сама выбирает нужный режим.

Параметры с префиксом state можно комбинировать с настройками с префиксом adjust:

Например, чтобы показать клавиатуру при старте активности, используйте stateVisible.

Данные настройки доступны и программно. Например, код для adjustResize:

Кстати, этот код не сработает в полноэкранном режиме (флаг FLAG_FULLSCREEN). Сверяйтесь с документацией.

Узнать выбранный язык на клавиатуре

Для определения текущего языка на клавиатуре можно использовать следующий код.

Следует быть осторожным с примером. На эмуляторе с Android 6.0 пример работал корректно. На реальных устройствах у меня корректно определялся русский язык, но при переключении на английский язык выдавал пустую строку или значение «zz». В этом случае можно прибегнуть к условиям if и проверять ожидаемое значение.

Источник

Как закрыть / скрыть программную клавиатуру Android с помощью Java?

В моем макете есть EditText и Button .

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

Чтобы прояснить это безумие, я хотел бы начать с извинений за имени всех пользователей Android за откровенно нелепое отношение Google к мягкой клавиатуре. Причина, по которой существует так много ответов, каждый по-разному, на один и тот же простой вопрос, заключается в том, что этот API, как и многие другие в Android, ужасно разработан. Я не могу придумать вежливого способа выразить это.

Я хочу спрятать клавиатуру. Я ожидаю предоставить Android следующий оператор: Keyboard.hide () . Конец. Большое спасибо. Но у Android есть проблема. Чтобы скрыть клавиатуру, необходимо использовать InputMethodManager . Хорошо, хорошо, это API Android для клавиатуры. НО! У вас должен быть Context , чтобы получить доступ к IMM. Теперь у нас проблема. Я могу скрыть клавиатуру от статического или служебного класса, который не использует или не нуждается в каком-либо контексте . или И что еще хуже, IMM требует, чтобы вы указали, от какого View (или, что еще хуже, какое Window ) вы хотите скрыть клавиатуру.

Вот почему так сложно спрятать клавиатуру. Уважаемый Google! Когда я ищу рецепт торта, не существует RecipeProvider на Земле, который отказался бы предоставить мне рецепт, если я сначала не отвечу, КТО этот торт будет съеден И где его будут есть !!

Эта печальная история заканчивается уродливой правдой: чтобы скрыть клавиатуру Android, вам потребуется предоставить 2 формы идентификации: Контекст и либо View , либо Window .

Я создал статический служебный метод, который может выполнять job ОЧЕНЬ надежно, если вы вызываете его из Activity .

Имейте в виду, что этот служебный метод работает ТОЛЬКО при вызове из Activity ! Вышеупомянутый метод вызывает getCurrentFocus целевого Activity для получения правильного токена окна..

Но предположим, вы хотите скрыть клавиатуру от EditText , размещенного в DialogFragment ? Вы не можете использовать для этого метод, описанный выше:

Это не сработает, потому что вы передадите ссылку на хост Fragment Activity , который не будет иметь сфокусированного управления, пока отображается Fragment ! Вот Это Да! Итак, чтобы скрыть клавиатуру от фрагментов, я прибегаю к низкоуровневой, более распространенной и уродливой:

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

О windowSoftInputMode

Есть еще один спорный момент, о котором следует знать. По умолчанию Android автоматически назначает начальный фокус первому EditText или настраиваемому элементу управления в вашем Activity . Естественно, следует, что InputMethod (обычно программная клавиатура) будет реагировать на событие фокуса, показывая себя. Атрибут windowSoftInputMode в AndroidManifest.xml , если ему задано значение stateAlwaysHidden , предписывает клавиатуре игнорировать это автоматически назначаемое начальное фокус.

Почти невероятно , похоже, он ничего не делает, чтобы предотвратить открытие клавиатуры при прикосновении к элементу управления (кроме случаев, когда focusable = «false» и/или focusableInTouchMode = «false» присвоены контролю). Очевидно, параметр windowSoftInputMode применяется только к событиям автоматической фокусировки, а не к событиям фокусировки, запускаемым событиями касания.

Следовательно, stateAlwaysHidden действительно ОЧЕНЬ плохо назван. Возможно, вместо этого его следует называть ignoreInitialFocus .

Надеюсь, это поможет.

ОБНОВЛЕНИЕ : Дополнительные способы получить токен окна

Если нет сфокусированного представления (например, может произойти, если вы только что изменили фрагменты), есть другие представления, которые предоставят полезный токен окна.

Это альтернативы приведенному выше коду if (view == null) view = new View (activity); Они явно не относятся к вашей активности.

Внутри класса фрагмента:

Учитывая фрагмент fragment в качестве параметра:

Начиная с тела вашего содержимого:

ОБНОВЛЕНИЕ 2: очистите фокус, чтобы клавиатура не отображалась снова, если вы открываете приложение из фона

Источник

Как закрыть/скрыть программную клавиатуру Android с помощью Java?

У меня есть EditText и Button в моем макете.

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

25 ответов

Как я могу закрыть программную клавиатуру как на Android, так и на iOS? Он, кажется, задерживается после того, как поле ввода уже исчезло ( перешел к следующему виду ).

У меня есть пользовательское диалоговое окно, содержащее EditText. Теперь, когда я показываю диалог с помощью Dialog.show(); , EditText немедленно захватывает фокус и отображает программную клавиатуру. Я попытался добавить это в манифест: android:windowSoftInputMode=stateHidden Основываясь на этом.

Вы можете заставить Android скрыть виртуальную клавиатуру , используя InputMethodManager , вызывая hideSoftInputFromWindow , передавая маркер окна, содержащего ваше сфокусированное представление.

Это заставит клавиатуру быть скрытой во всех ситуациях. В некоторых случаях вы захотите передать InputMethodManager.HIDE_IMPLICIT_ONLY в качестве второго параметра, чтобы убедиться, что вы скрываете клавиатуру только тогда, когда пользователь явно не заставлял ее появляться (удерживая меню нажатой).

Читайте также:  Вейдер для андроид что это

Примечание: Если вы хотите сделать это в Kotlin, используйте: context?.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager

Kotlin синтаксис

Чтобы помочь прояснить это безумие, я хотел бы начать с извинений от имени всех пользователей Android за совершенно нелепое обращение Google с мягкой клавиатурой. Причина, по которой существует так много ответов, каждый из которых отличается, на один и тот же простой вопрос, заключается в том, что этот API, как и многие другие в Android, ужасно спроектирован. Я не могу придумать вежливого способа выразить это.

Я хочу спрятать клавиатуру. Я рассчитываю представить Android следующее утверждение: Keyboard.hide() . Конец. Большое спасибо. Но у Android есть проблема. Вы должны использовать InputMethodManager , чтобы скрыть клавиатуру. OK, отлично, это Android-е API для клавиатуры. BUT! Вам необходимо иметь Context , чтобы получить доступ к IMM. Теперь у нас есть проблема. Возможно, я захочу скрыть клавиатуру от статического или служебного класса, который не использует или не нуждается в каком-либо Context . или и FAR хуже, IMM требует, чтобы вы указали, что View (или еще хуже, что Window ) вы хотите скрыть клавиатуру FROM.

Именно это делает скрытие клавиатуры таким сложным. Дорогой Google: когда я ищу рецепт торта, нет такого RecipeProvider на Земле, который отказался бы предоставить мне рецепт, Если бы я сначала не ответил WHO торт будет съеден AND, где он будет съеден!!

Эта печальная история заканчивается уродливой правдой: чтобы скрыть клавиатуру Android, вам потребуется предоставить 2 формы идентификации: a Context и либо a View , либо a Window .

Я создал статический служебный метод, который может выполнять работу VERY надежно, при условии, что вы вызываете его из Activity .

Имейте в виду, что этот служебный метод ONLY работает при вызове из Activity ! Вышеприведенный метод вызывает getCurrentFocus целевого объекта Activity для получения соответствующего токена окна.

Но предположим, вы хотите скрыть клавиатуру от EditText , размещенного в DialogFragment ? Вы не можете использовать для этого вышеприведенный метод:

Это не сработает , потому что вы будете передавать ссылку на хост Fragment Activity , который не будет иметь сфокусированного управления, пока отображается Fragment ! Ух ты! Поэтому, чтобы скрыть клавиатуру от фрагментов, я прибегаю к более низкому уровню, более распространенному и уродливому:

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

О windowSoftInputMode

Есть еще один спорный момент, о котором следует помнить. По умолчанию Android автоматически назначит начальный фокус первому элементу управления EditText или focusable в вашем Activity . Из этого естественно следует, что InputMethod (как правило, программная клавиатура) будет реагировать на событие фокусировки, показывая себя. Атрибут windowSoftInputMode в AndroidManifest.xml , если он установлен в stateAlwaysHidden , указывает клавиатуре игнорировать этот автоматически назначенный начальный фокус.

Почти невероятно, но он, по-видимому, ничего не делает для предотвращения открытия клавиатуры при прикосновении к элементу управления (если только focusable=»false» и/или focusableInTouchMode=»false» не назначены элементу управления). По-видимому, параметр windowSoftInputMode применяется только к событиям автоматической фокусировки, а не к событиям фокусировки, вызванным событиями касания.

Следовательно, stateAlwaysHidden -это действительно плохо названный VERY. Возможно, вместо этого его следует назвать ignoreInitialFocus .

Надеюсь, это поможет.

UPDATE: больше способов получить токен окна

Если нет сфокусированного взгляда (например, может произойти, если вы просто изменили фрагменты), есть и другие представления, которые будут предоставлять полезный токен окна.

Это альтернативы приведенному выше коду if (view == null) view = new View(activity); они явно не относятся к вашей деятельности.

Внутри класса фрагментов:

Задан фрагмент fragment в качестве параметра:

Начиная с вашего тела контента:

UPDATE 2: Очистите фокус, чтобы избежать повторного отображения клавиатуры, если вы откроете приложение в фоновом режиме

Добавьте эту строку в конец метода:

Также полезно для скрытия софт-клавиатуры это:

Это может быть использовано для подавления программной клавиатуры до тех пор, пока пользователь фактически не коснется представления editText.

Вот мой вопрос! У меня есть поле editText с максимальным символом 1. Затем я вызываю программную клавиатуру и вводю символ. Можно ли автоматически скрыть клавиатуру после ввода одного символа? Если это возможно, как я могу это сделать?

Проблема : Я хочу скрыть клавиатуру, когда нажата кнопка Add. На экране два EditText . Клавиатура не появляется при запуске действия, что хорошо, но она не исчезает при нажатии кнопки. Вот все возможные вопросы из Stack Overflow, которые я видел, ответы на которые мне не помогают: Закрыть/скрыть.

У меня есть еще одно решение, чтобы скрыть клавиатуру:

Здесь проходят HIDE_IMPLICIT_ONLY в позиции showFlag и 0 в позиции hiddenFlag . Он будет принудительно закрывать мягкую клавиатуру.

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

Пожалуйста, попробуйте этот код ниже в onCreate()

Обновление: я не знаю, почему это решение больше не работает ( я только что протестировал на Android 23). Пожалуйста, используйте вместо этого раствор Саурабха Парека . Вот он:

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

Создайте функцию, которая будет управлять некоторыми свойствами EditText :

Затем убедитесь, что onFocus из EditText вы открываете/закрываете клавиатуру:

Теперь всякий раз, когда вы хотите открыть клавиатуру вручную, звоните:

И для заключительного звонка:

У саурабха Парека пока есть лучший ответ.

Хотя с таким же успехом можно было бы использовать правильные флаги.

Пример реального использования

после долгих поисков здесь я нашел ответ, который работает для меня

Короткий ответ

В вашем слушателе OnClick вызовите onEditorAction из EditText с IME_ACTION_DONE

Детализация

Я чувствую, что этот метод лучше, проще и более соответствует шаблону дизайна Android. В простом примере выше (и обычно в большинстве распространенных случаев) у вас будет EditText , который имеет/имел фокус, и он также обычно был тем, кто вызывал клавиатуру в первую очередь (он определенно способен вызывать ее во многих распространенных сценариях). Таким же образом, это должен быть тот, кто освобождает клавиатуру, обычно это может быть сделано с помощью ImeAction . Просто посмотрите, как ведет себя EditText с android:imeOptions=»actionDone» , вы хотите достичь того же поведения теми же средствами.

Это должно сработать:

Я использую пользовательскую клавиатуру для ввода номера Hex, поэтому у меня не может появиться клавиатура IMM.

Читайте также:  Android margins and padding

В v3.2.4_r1 setSoftInputShownOnFocus(boolean show) был добавлен для управления погодой или не для отображения клавиатуры, когда TextView получает фокус, но он все еще скрыт, поэтому отражение должно быть использовано:

Для более старых версий я получил очень хорошие результаты (но далеко не идеальные) с помощью OnGlobalLayoutListener , добавленного с помощью ViewTreeObserver из моего корневого представления , а затем проверяющего, отображается ли клавиатура следующим образом:

Это последнее решение может показать клавиатуру на долю секунды и испортить маркеры выбора.

Когда в клавиатуре вводится полный экран, onGlobalLayout не вызывается. Чтобы избежать этого, используйте TextView#setImeOptions(int) или в объявлении TextView XML:

Обновление: только что нашел, что диалоги используют, чтобы никогда не показывать клавиатуру и работает во всех версиях:

Я потратил более двух дней на проработку всех решений, опубликованных в этой теме, и обнаружил, что они так или иначе отсутствуют. Мое точное требование состоит в том, чтобы иметь кнопку, которая будет с надежностью 100% показывать или скрывать экранную клавиатуру. Когда клавиатура находится в скрытом состоянии, она не должна снова появляться, независимо от того, на какие поля ввода нажимает пользователь. Когда она находится в своем видимом состоянии, клавиатура не должна исчезать, независимо от того, какие кнопки нажимает пользователь. Это должно работать на Android 2.2+ вплоть до самых последних устройств.

Вы можете увидеть рабочую реализацию этого в моем приложении clean RPN .

После тестирования многих предложенных ответов на ряде различных телефонов (включая устройства froyo и gingerbread) стало очевидно, что android приложения могут надежно работать:

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

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

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

Это приводит к тому, что текущее действие сохраняет свое состояние в Bundle, а затем оно запускается, проходя через логическое значение, которое указывает, должна ли клавиатура быть показана или скрыта.

Внутри метода onCreate выполняется следующий код:

Если должна быть показана программная клавиатура, то InputMethodManager будет предложено показать клавиатуру, а окну будет дано указание сделать программный ввод всегда видимым. Если программная клавиатура должна быть скрыта, то устанавливается WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM.

Этот подход надежно работает на всех устройствах, на которых я тестировал — от 4-летнего телефона HTC под управлением android 2.2 до nexus 7 под управлением 4.2.2. Единственным недостатком такого подхода является то, что вам нужно быть осторожным в обращении с кнопкой «Назад». Поскольку мое приложение по существу имеет только один экран (его калькулятор) Я могу переопределить onBackPressed() и вернуться на главный экран устройства.

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

Благодаря этому ответу SO я получил следующее , что в моем случае хорошо работает при прокрутке фрагментов a ViewPager.

Вышеприведенные ответы работают для разных сценариев, но если вы хотите скрыть клавиатуру внутри представления и изо всех сил пытаетесь получить правильный контекст, попробуйте это:

а чтобы получить контекст извлеките его из конструктора:)

Если вы хотите закрыть программную клавиатуру во время модульного или функционального теста, вы можете сделать это, нажав кнопку «back button» из вашего теста:

Я ставлю «back button» в кавычки, так как вышеизложенное не вызывает onBackPressed() для рассматриваемого действия. Он просто закрывает клавиатуру.

Обязательно сделайте небольшую паузу, прежде чем двигаться дальше, так как требуется некоторое время, чтобы закрыть кнопку назад, поэтому последующие клики на просмотры и т. д. не будут зарегистрированы до тех пор, пока не пройдет короткая пауза (1 секунда-это достаточно долго ime).

Вот как вы это делаете в Mono для Android (он же MonoDroid)

Это сработало для меня при всем причудливом поведении клавиатуры

Простой и удобный в использовании метод, просто позвоните hideKeyboardFrom(YourActivity.this); чтобы скрыть клавиатуру

Добавьте в свою активность android:windowSoftInputMode=»stateHidden» в файле манифеста. Пример:

Просто используйте этот оптимизированный код в своей деятельности:

Похожие вопросы:

Я пытаюсь написать простое приложение Android в Kotlin. У меня есть EditText и кнопка в моем макете. После записи в поле редактирования и нажатия на кнопку Я хочу скрыть виртуальную клавиатуру. Есть.

Я хочу протестировать приложение android, используя LeanFT в java, и я хочу знать, как я могу скрыть программную клавиатуру во время тестирования?

В WP8, как скрыть программную клавиатуру, когда listbox прокручивается? Есть ли событие, которое можно обнаружить при прокрутке listbox?

Как я могу закрыть программную клавиатуру как на Android, так и на iOS? Он, кажется, задерживается после того, как поле ввода уже исчезло ( перешел к следующему виду ).

У меня есть пользовательское диалоговое окно, содержащее EditText. Теперь, когда я показываю диалог с помощью Dialog.show(); , EditText немедленно захватывает фокус и отображает программную.

Вот мой вопрос! У меня есть поле editText с максимальным символом 1. Затем я вызываю программную клавиатуру и вводю символ. Можно ли.

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

У меня есть пользовательские клавиатуры и не хотите показать на softkeyboard Android. это может быть достигнуто с помощью следующего кода ( Как скрыть программную клавиатуру Android на EditText ).

Можно ли программно Показать/Скрыть программную клавиатуру для Cordova/Phonegap?

У меня есть активность только для SearchView, которая сосредоточена на создании, поэтому появляется мягкая клавиатура. Это код (kotlin): override fun onCreate(savedInstanceState: Bundle?) <.

Источник

Оцените статью