Android studio как отследить скрытие клавиатуры

Обновлено: 14.05.2024

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

у меня есть два экрана в мое приложение.

  • первый из них имеет 2 EditText - один для имени пользователя и один для пароля
  • второй имеет один ListView и EditText-to фильтр listView

на моем первом экране я хочу, чтобы имя пользователя EditText было сосредоточено на запуске, и клавиатура должна быть видна..Это моя реализация (упрощенная путем удаления ненужных/несвязанных кодов)..

Ну клавиатура не отображается при запуске. И мой дизайн плохо требует клавиатуры там..

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

и моя проблема в том, что я получаю прямо противоположное в обоих случаях. Надеюсь, кто-то сталкивался с этой проблемой раньше..Кстати, я тестирую на симуляторе и телефоне HTC Desire..

Ну, я получил это работает, с помощью всех друзей здесь.

1. Чтобы показать клавиатуру при запуске

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

для меня второе решение выглядело аккуратно, поэтому я решил придерживаться его..Но первый, конечно, работает. Также ответить @Dyarish содержат умные взлом используя представление ScrollView ниже полей EditText, чтобы дать полей EditText фокус..Но я не пробовал, но это должно сработать. Не аккуратно, хотя..

2. Чтобы скрыть клавиатуру при запуске активности

только один ответ работал для меня, который предоставляет @Dyarish. И решение заключается в использовании настройки focusableInTouchMode в xml для макета, содержащего editText В. Это сделало трюк

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

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

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

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

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

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

Кнопка 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 и показать клавиатуру:

Либо используйте тег <requestFocus /> для нужного 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:

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

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

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

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

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

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

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

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

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

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

Возможно ли это?

Примечание

Это решение не будет работать для мягких клавиатур и onConfigurationChanged не будет вызываться для программного (виртуального) клавиатуры.

Затем просто измените видимость некоторых видов, обновите поле и измените файл макета.

Это не может быть самым эффективным решением. Но это работало для меня каждый раз. Я называю эту функцию, когда мне нужно слушать softKeyboard.

Примечание: Такой подход вызовет проблемы, если пользователь использует плавающую клавиатуру.

Если вы хотите обработать отображение/скрытие окна IMM (виртуальной) клавиатуры из своей деятельности, вам необходимо подклассифицировать макет и переопределить метод onMesure (чтобы вы могли определить измеренную ширину и измеренную высоту вашего макета). После этого установите подклассифицированный макет в качестве основного вида для вашей деятельности с помощью setContentView(). Теперь вы сможете обрабатывать события IMM show/hide window. Если это звучит сложно, это не так. Здесь код:

Теперь внутри вашей Activity объявите подкласс для вашего макета (main.xml)

Из кода, который мы раздуваем макет для нашей деятельности в конструкторе подкласса, вы можете видеть

А теперь просто настройте представление содержимого для подкласса макета для нашей деятельности.

Я сделал это так:

Добавить интерфейс OnKeyboardVisibilityListener .

HomeActivity.java:

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

Основываясь на кодексе от Nebojsa Tomcic, я разработал следующий RelativeLayout-Subclass:

Это работает отлично. Отметьте, что это решение будет работать, только если для режима Soft Input вашего действия установлено значение "WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE"

Как и ответ @amalBit, зарегистрируйте прослушиватель на глобальном макете и вычислите разницу видимого дна dectorView и его предложенного дна, если разница больше некоторого значения (догадалась высота IME), мы считаем, что IME вверх:

порог высоты 100 - это предполагаемая минимальная высота IME.

Это работает как для adjustPan, так и для настройкиResize.

Решение Nebojsa почти сработало для меня. Когда я щелкнул внутри многострочного EditText, он знал, что клавиатура была отображена, но когда я начал печатать внутри EditText, фактическийHeight и suggestHeight были все те же, поэтому он не знал, что клавиатура все еще отображается. Я сделал небольшую модификацию, чтобы сохранить максимальную высоту, и она отлично работает. Вот пересмотренный подкласс:

Я решаю это, переопределяя onKeyPreIme (int keyCode, событие KeyEvent) в своем настраиваемом EditText.

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

ПРИМЕЧАНИЕ.. Одна вещь, которая должна быть в курсе этого взлома, заключается в том, что этот обратный вызов запускается немедленно, когда EditText получает или теряет фокус. Фактически это будет срабатывать прямо перед, если на клавиатуре отображается или скрывается мягкая клавиатура. Лучший способ, которым я нашел что-то после, на клавиатуре показывает или скрывает, - это использовать Handler и задержать что-то

Есть ли в Android способ определить, видна ли программная («мягкая») клавиатура на экране?

что может быть решением этой проблемы в некоторых случаях (если установлена ​​сторонняя клавиатура), чтобы проверить глобальные уведомления, так как когда клавиатура открыта, появляется системное уведомление с надписью «сменить клавиатуру» - это можно сделать с помощью NotificationListenerService почти 8 лет и до сих пор нет твердого решения, о, если они введут его, оно будет для API> 30 в любом случае, так что не берите в голову .

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

Было бы эффективно создать свойство видимости клавиатуры и наблюдать, как эти изменения задерживаются, поскольку метод onGlobalLayout вызывается много раз. Также хорошо проверить вращение устройства и windowSoftInputMode нет adjustNothing .

Поместите это в класс utils и передайте действие - теперь полезно для всего приложения. @ Code-Apprentice В задании / фрагменте вы хотите отреагировать на изменения софт-клавиатуры. ContentView является корневым представлением макета этого действия / фрагмента. Это не работает для меня. Разветвленная клавиатура срабатывает даже в том случае, когда клавиатура никогда не отображалась или была показана, а затем закрыта. Это жалкое , что Android рамка не хватает, и что еще хуже, непоследовательное в этом отношении. Это должно быть очень просто. Где в коде точно я должен поставить это? Я включил это в действие, однако он не обнаруживает появление или исчезновение клавиатуры. Ну, вы можете поместить это в любом месте вашей деятельности. Просто поместите его в метод onCreate () после вызова setContentView (), и вы должны получить обратные вызовы. Кстати, на каком устройстве вы его примеряете? @MaulikDodia Я проверил, и он отлично работает во фрагментах. Установите его так: KeyboardUtils.addKeyboardToggleListener (getActivity (), this); и это должно работать. На каком устройстве вы это примеряете? Я пытаюсь использовать устройство Moto-G3. @ Ravindu1024 Спасибо за этот фрагмент, у меня есть один вопрос, что этот код требуется для удаления слушателя?

1. Поместите идентификатор на ваш корневой вид

rootView это просто представление, указывающее на мой корневой вид в этом случае relative layout :

2. Инициализируйте свое корневое представление в своей деятельности:

RelativeLayout rootView = (RelativeLayout) findViewById(R.id.addresses_confirm_root_view);

3. Определите, открыта или закрыта клавиатура с помощью getViewTreeObserver()

Эй, приятель, не могли бы вы сказать мне, откуда эта магия 100? Почему не 101 или 99? Спасибо @Karoly я думаю, что это может быть и 1 . Не важно. Только это должно быть меньше реальной длины клавиатуры @Karoly в основном, он сравнивает размер окна с размером корневого представления вашей деятельности. Внешний вид программной клавиатуры не влияет на размер главного окна. так что вы все еще можете понизить значение 100. Магическое число зависит от вашего расположения верхней панели среди других вещей. Так что это относительно вашего приложения. Я использовал 400 в одном из моих. помните, что onGlobalLayout вызывается каждый кадр, поэтому убедитесь, что вы не делаете там тяжелые вещи.

Затем написал этот метод:

Затем вы можете использовать это для проверки всех полей (EditText, AutoCompleteTextView и т. Д.), Которые могли открыть программную клавиатуру:

К сожалению, это не идеальное решение, но оно выполняет свою работу.

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

Вы можете использовать результат обратного вызова showSoftInput () и hideSoftInput (), чтобы проверить состояние клавиатуры. Полная информация и пример кода на

Это работало на меня каждый раз.

Он вернет true, если видна программная клавиатура.

Это полезно только во время разработки, а не для использования в приложении. (У пользователей не будет запущен adb.)

Так что после долгого времени игры с AccessibilityServices, оконными вставками, определением высоты экрана и т. Д., Я думаю, я нашел способ сделать это.

Отказ от ответственности: он использует скрытый метод в Android, что означает, что он может быть непоследовательным. Тем не менее, в моем тестировании, похоже, работает.

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

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

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

На основной деятельности:

Основное логическое значение по умолчанию для mKeyboardStatus будет инициализировано как false .

Затем проверьте значение следующим образом и при необходимости выполните действие:

Это должно работать, если вам нужно проверить состояние клавиатуры:

Где UiUtils.KEYBOARD_VISIBLE_THRESHOLD_DP = 100, а dip () - это функция anko, которая преобразует dpToPx:

Я сделал это, установив GlobalLayoutListener, следующим образом:

В каких случаях это будет отличаться от ответа @BrownsooHan? Я ищу способ, которым показывает приложение, которое рисует поверх других приложений, чтобы убраться с клавиатуры. Его ответ в основном такой же, как и у меня, только я ответил за много месяцев до него, и у него больше голосов.

Попробуйте этот код, он действительно работает, если KeyboardShown показан, то эта функция возвращает истинное значение .

IsKeyboardShown продолжает вызывать себя, когда он не показан.

В моем случае у меня был только один EditText способ управления макетом, поэтому я нашел это решение. Это работает хорошо, в основном это обычай, EditText который слушает фокус и отправляет локальную трансляцию, если фокус меняется или если нажата кнопка назад / сделано. Чтобы работать, вам нужно поместить манекен View в макет с помощью android:focusable="true" и android:focusableInTouchMode="true" потому, что при вызове clearFocus() фокус будет переназначен на первый фокусируемый вид. Пример фиктивного представления:

Дополнительная информация

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

есть ли способ В Android обнаружить, если программное обеспечение (a.к. a." мягкая") клавиатура видна на экране?

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

1. Поместите id в корневое представление

rootView - это просто вид, указывающий на мой корневой вид в этом случае a relative layout :

2. Инициализируйте корневое представление в своей деятельности:

RelativeLayout rootView = (RelativeLayout) findViewById(R.id.addresses_confirm_root_view); 3. Определите, открыта или закрыта клавиатура с помощью getViewTreeObserver()

вы можете использовать результат обратного вызова showSoftInput () и hideSoftInput (), чтобы проверить состояние клавиатуры. Полная информация и пример кода на

Он работал для меня каждый раз.

он вернет true, если отображается программная клавиатура.

затем написал этот метод:

затем вы можете использовать это для проверки всех полей (EditText, AutoCompleteTextView и т. д.), которые могли открыть softkeyboard:

Addmittely не идеальное решение, но оно выполняет свою работу.

Я сделал это, установив GlobalLayoutListener следующим образом:

попробуйте этот код, он действительно работает, если отображается KeyboardShown, то эта функция возвращает true value.

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

на в MainActivity:

первичное логическое значение по умолчанию для mKeyboardStatus будет инициализировано в false.

затем проверьте значение следующим образом и при необходимости выполните действие:

дополнительная информация

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

ответ @iWantScala велик, но не работает для меня
rootView.getRootView().getHeight() всегда имеет одно и то же значение

один из способов-определить два vars

добавить глобальный слушатель

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

У меня была похожая проблема и я нашел одну библиотеку для этого, и я играл с ним. Это работает, как очищаться. Вот он Библиотека Клавиатура.

Итак, после долгого времени игры с AccessibilityServices, вставками окон, обнаружением высоты экрана и т. д., Я думаю, что нашел способ сделать это.

отказ от ответственности: он использует скрытый метод в Android, что означает, что он может быть непоследовательным. Однако, в моем тестировании, похоже, это работает.

вызов, который возвращает высоту, в пиксели текущей клавиатуры. Теоретически клавиатура не должна быть высотой 0 пикселей, поэтому я сделал простую проверку высоты (в Котлине):

Я использую Android скрытый API чтобы избежать отражения, когда я вызываю скрытые методы (я делаю это много для приложений, которые я разрабатываю, которые в основном являются хакерскими / тюнерными приложениями), но это должно быть возможно и с отражением:

У меня была похожая проблема. Мне нужно было реагировать на кнопку Enter на экране (которая скрывала клавиатуру). В этом случае вы можете подписаться на OnEditorAction текстового представления клавиатура была открыта - если у вас есть несколько редактируемых полей, то подписаться на все из них.

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

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

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

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

Реализация ниже делает только одну проверку.
Если вы выполняете несколько проверок, вы должны включить все тесты (_keyboardVisible).

в Android вы можете обнаружить через оболочку ADB. Я написал и использую этот метод:

вот обходной путь, чтобы узнать, видна ли softkeyboard.

  1. проверьте наличие запущенных служб в системе с помощью ActivityManager.getRunningServices (max_count_of_services);
  2. из возвращенного ActivityManager.Экземпляры RunningServiceInfo, проверьте clientCount значение для службы мягкой клавиатуры.
  3. вышеупомянутый clientCount будет увеличиваться каждый раз, когда отображается мягкая клавиатура. Например, если clientCount изначально был 1, это будет 2, когда клавиатура будет показана.
  4. при увольнении клавиатуры, clientCount уменьшается. В этом случае он сбрасывается на 1.

некоторые из популярных клавиатур имеют определенные ключевые слова в своих именах классов:

  1. Google AOSP = IME
  2. Swype = IME
  3. Swiftkey = KeyboardService
  4. Fleksy = клавиатура
  5. Adaptxt = IME (KPTAdaptxtIME)
  6. Smart = Клавиатура (SmartKeyboard)

вышеупомянутая информация может быть объединена для строгого способа узнать, видна ли мягкая клавиатура.

Я сделал это следующим образом, но его relevet только если ваша цель-закрыть / открыть keyboad.

закрыть пример: (проверка, если клавиатура уже закрыта, если нет - закрытие)

Читайте также: