Получить высоту клавиатуры в Lollipop

Что изменилось в Lollipop относительно высоты клавиатуры?

У меня был метод, который с помощью getViewTreeObserver() правильно вернул высоту клавиатуры на каждой версии до Lollipop (протестировал на ldpi, mdpi, hdpi и xhdpi – никаких проблем), но кажется, что на Lollipop высота возвращается немного больше, чем Реальная высота клавиатуры.

На моем Asus Nexus 7 я получил высоту примерно на 70 пикселей больше фактической высоты.

Кто-нибудь знает, как получить реальную высоту клавиатуры на Lollipop?

Попробуйте этот следующий код, когда открывается клавиатура.

 @TargetApi(Build.VERSION_CODES.HONEYCOMB_MR2) public int calculateScreenHeightForLollipop() { WindowManager wm = (WindowManager) mContext.getSystemService(Context.WINDOW_SERVICE); Display display = wm.getDefaultDisplay(); Point size = new Point(); display.getSize(size); return size.y; } /** * Call this function to resize the emoji popup according to your soft keyboard size */ public void setSizeForSoftKeyboard() { rootView.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() { @Override public void onGlobalLayout() { Rect r = new Rect(); rootView.getWindowVisibleDisplayFrame(r); int screenHeight; if (Build.VERSION.SDK_INT >= 5.0) { screenHeight = calculateScreenHeightForLollipop(); } else { screenHeight = rootView.getRootView().getHeight(); } int heightDifference = screenHeight - (r.bottom - r.top); int resourceId = mContext.getResources() .getIdentifier("status_bar_height", "dimen", "android"); if (resourceId > 0) { heightDifference -= mContext.getResources() .getDimensionPixelSize(resourceId); } if (heightDifference > 100) { keyBoardHeight = heightDifference; setSize(LayoutParams.MATCH_PARENT, keyBoardHeight); if (!isOpened) { if (onSoftKeyboardOpenCloseListener != null) onSoftKeyboardOpenCloseListener.onKeyboardOpen(keyBoardHeight); } isOpened = true; if (pendingOpen) { showAtBottom(); pendingOpen = false; } } else { isOpened = false; if (onSoftKeyboardOpenCloseListener != null) onSoftKeyboardOpenCloseListener.onKeyboardClose(); } } }); } 
Intereting Posts
Как я могу создать уведомление, которое отличается от устройства и изнашивается? Быстрые способы импорта чертежей в Android Studio? Android: нужно использовать onSizeChanged для View.getWidth / Height () в классе, расширяющем Activity Совместимость match_parent Eclipse не может найти adb Не удалось запустить таймер в службе в android Не удается получить доступ к сеансу Facebook – UnknownError: Недопустимое приложение Как изменить цвет фона вокруг диалогового окна? Как показать активность до того, как мое приложение будет удалено (Android) Сочетание двух гистограмм и двух линейных диаграмм с использованием aChartEngine в Android Обработчик элемента элемента действия в фрагменте Скорость чтения SharedPreferences Почему Jenkins Android Emulator Plugin воссоздает мои снимки эмулятора в каждой сборке? Как выполнить поиск по арабскому тексту в JAVA? Android Gallery View Прокрутка проблемы, когда onClickListener для данных