Android отследить появление клавиатуры

Android: обнаружение программной клавиатуры открыта

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

Для этого я могу использовать: fullScroll (View.FOCUS_DOWN);

Но как я могу запустить эту команду после запуска события открытия мягкой клавиатуры?

ОТВЕТЫ

Ответ 1

Per этот пост и этот пост на Android- разработчикам не кажется, что можно делать то, что вы хотите. Возможно, вам захочется пересмотреть свой вариант использования для того, что вы делаете. Возможно, один из softInputMode будет работать для вас.

Ответ 2

Вот мое решение:

2/Метод утилиты (поместите его туда, где хотите, например, в класс с именем KeyboardUtil )

3/Использование из действия таким образом (хорошее место в onCreate):

Ответ 3

просмотр даты, возможно, у вас есть решение для вашего вопроса, иначе:

Вот такой же ответ, который я сделал для другого вопроса: Есть ли способ узнать, отображается ли мягкая клавиатура?

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

Проверьте настройки конфигурации для своей деятельности.

Это для вашего AndroidManifest.xml

Вам нужно будет @Override общедоступный метод onConfigurationChanged (android.content.res.Configuration) вашей Activity, чтобы иметь возможность обрабатывать, например, эти значения:
hardKeyboardHidden,
клавиатура,
keyboardHidden

Вы увидите там что-то вроде этого:

Также вы сможете прочитать что-то вроде этого:

UPDATE:

Вот конкретный образец того, о чем я говорю:

Я надеюсь, что это поможет вам

Ответ 4

Единственный способ, которым я мог обойти это, — установить мою активность android: windowSoftInputMode = «adjustResize», а затем вставить в макет пользовательский «вид детекторов», чтобы обрабатывать изменение размера контейнера и распространять его как настраиваемое событие (через прослушиватель) для включения/выключения мягкой клавиатуры.

В следующей статье описывается подход к ее реализации: EditText не вызывает изменения при нажатии на нее

Ответ 5

Это работает для меня

Где родительский основной макет, viewToHide — это представление, которое показывает или скрывается, когда отображается клавиатура, а хост, папка, пользователь и пароль являются EditText моей формы.

И это в манифесте

Надеемся на эту помощь

Ответ 6

Вот мое решение. Ему не нужен андроид: windowSoftInputMode = «adjustResize»

Затем я просто продлеваю свою активность из этого действия и переопределяю методы onKeyboardClosed/onKeyboardOpen.

Ответ 7

для этого, что я использовал для этого:

и в вашем Activity или fragment вызовите этот метод в onCreate()

Ответ 8

@BoD answer отлично работает, если я удаляю следующую строку.

Источник

Как определить, отображается ли программная клавиатура на устройстве Android?

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

Прямого пути нет – см. http://groups.google.com/group/android-platform/browse_thread/thread/1728f26f2334c060/5e4910f0d9eb898a, где ответила Диана Хакборн из команды Android. Однако вы можете обнаружить это косвенно, проверяя, изменился ли размер окна в #onMeasure. См. Как проверить видимость программной клавиатуры в Android? ,

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

Я создал простой класс, который можно использовать для этого: https://github.com/ravindu1024/android-keyboardlistener . Просто скопируйте его в свой проект и используйте следующее:

Очень просто

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

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

Читайте также:  How to use api android

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  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)

Из ActivityManager.RunningServiceInfo проверьте приведенные выше шаблоны в ClassNames. Кроме того, clientManager.RunningServiceInfo clientPackage = android указывает, что клавиатура привязана к системе.

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

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

Одним из способов является определение двух варов

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

A может использоваться:

Если это поможет мне решить проблему с этим:

Открывание клавиатуры – это логическое значение, равное true при запуске представления, а id – это идентификатор относительной компоновки в макете

Может быть что-то вроде этого:

Не уверен, но если отображается клавиатура, IMM должен быть активным .

Источник

Как определить, отображается ли программная клавиатура на устройстве Android?

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

22 ответов

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

Я создал простой класс, который можно использовать для этого:https://github.com/ravindu1024/android-keyboardlistener. Просто скопируйте его в свой проект и используйте следующим образом:

Очень Просто

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.

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

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

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

решение, которое обнаруживает разницу в изменениях макета, не работает очень хорошо, потому что оно сильно зависит от плотности экрана, так как 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)

Из ActivityManager.RunningServiceInfo, проверьте наличие вышеуказанных шаблонов в именах классов. Кроме Того, ActivityManager.RunningServiceInfo это clientPackage=android, что указывает на то, что клавиатура привязана к системе.

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

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

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

Источник

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