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

есть ли способ сказать, отображается ли экранная клавиатура в действии или нет?

Я пытался

InputMethodManager manager = (InputMethodManager) getSystemService(getApplicationContext().INPUT_METHOD_SERVICE); manager.isActive(v) 

но isActive возвращает false только до того, как будет отображаться клавиатура, но если kb появляется, а затем отклоняется, isActive также возвращает true.

поэтому есть ли другой способ проверить эту проблему.

благодаря

Согласно этому POST

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

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

Вам необходимо реализовать подclass ListView , а затем использовать его в ListActivity или Activity или View .

 public class ThreadView extends ListView { public ThreadView(Context context, AttributeSet attributeSet) { super(context, attributeSet); } @Override protected void onSizeChanged(int xNew, int yNew, int xOld, int yOld) { super.onSizeChanged(xNew, yNew, xOld, yOld); if (yOld > yNew) { setSelection(((ListAdapter) getAdapter()).getCount() - 1); } } } 

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

PS. «Check Configuration Changes» работает только для ручной клавиатуры.

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

Поскольку dumpsys требует permission.android.DUMP .android.DUMP, который является разрешением системного приложения, у вас есть два варианта: 1. используйте укороченное устройство для предоставления этого разрешения. 2. переопределите проблему, используя adb как описано в моем другом ответе .

Теперь запустите следующую команду: dumpsys window InputMethod | grep "mHasSurface" dumpsys window InputMethod | grep "mHasSurface" чтобы получить данные, которые вы ищете.

Это моя идея. Он не проверен.

 @Override public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); // Checks whether a keyboard is available which is not hard keyboard if ((newConfig.keyboardHidden == Configuration.HARDKEYBOARDHIDDEN_NO)&&(newConfig.keyboardHidden != Configuration.HARDKEYBOARDHIDDEN_NO)) { Toast.makeText(this, "soft keyboard visible", Toast.LENGTH_SHORT).show(); } else if (newConfig.keyboardHidden == Configuration.KEYBOARDHIDDEN_YES) { Toast.makeText(this, "soft keyboard hidden", Toast.LENGTH_SHORT).show(); } } 

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

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

и это для вашего classа Activity http://developer.android.com/reference/android/app/Activity.html#onConfigurationChanged(android.content.res.Configuration )

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

Для всех возможных значений проверьте http://developer.android.com/reference/android/content/res/Configuration.html

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

 HARDKEYBOARDHIDDEN_NO HARDKEYBOARDHIDDEN_UNDEFINED HARDKEYBOARDHIDDEN_YES KEYBOARDHIDDEN_NO KEYBOARDHIDDEN_UNDEFINED KEYBOARDHIDDEN_YES KEYBOARD_12KEY KEYBOARD_NOKEYS KEYBOARD_QWERTY KEYBOARD_UNDEFINED 

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

 public int hardKeyboardHidden // A flag indicating whether the hard keyboard // has been hidden. public int keyboard The kind of keyboard attached to the device. public int keyboardHidden A flag indicating whether any keyboard is available. 

ОБНОВИТЬ:

Вот конкретный пример того, о чем я говорю:

http://developer.android.com/guide/topics/resources/runtime-changes.html

 @Override public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); // Checks the orientation of the screen if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) { Toast.makeText(this, "landscape", Toast.LENGTH_SHORT).show(); } else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT) { Toast.makeText(this, "portrait", Toast.LENGTH_SHORT).show(); } // Checks whether a hardware keyboard is available if (newConfig.hardKeyboardHidden == Configuration.HARDKEYBOARDHIDDEN_NO) { Toast.makeText(this, "keyboard visible", Toast.LENGTH_SHORT).show(); } else if (newConfig.hardKeyboardHidden == Configuration.HARDKEYBOARDHIDDEN_YES) { Toast.makeText(this, "keyboard hidden", Toast.LENGTH_SHORT).show(); } } 
  • Преобразование double в строку
  • Рисовать в canvasе пальцем, Android
  • Обнаружение подключения минигарнитуры к устройству Android или нет.
  • Динамически добавлять элементы в списокView Android
  • Какова цель «android.intent.category.DEFAULT»?
  • Управление скоростью MediaPlayer в Android
  • Чтение данных EXIF ​​из массива байтов в android
  • Как избежать задержки в сообщениях Android GCM / изменении сердечного ритма
  • ANDROID: разделить экран на 2 равных части с 2 списками
  • Как подключить источник библиотеки поддержки Android в Eclipse?
  • Как выбрать несколько изображений из галереи в Android?
  • Давайте будем гением компьютера.