Для того чтобы узнать, активна ли на телефоне клавиатура, а также узнать ее высоту, вам понадобится использовать классы и методы из Android API.
1. Получение состояния клавиатуры
Для определения состояния клавиатуры мы можем использовать слушатель событий, предоставляемых Android Framework. Для этого нужно добавить слушатель ViewTreeObserver.OnGlobalLayoutListener
к главному представлению (например, LinearLayout
). Примените следующий код:
View mainView = getWindow().findViewById(R.id.main_layout); // замените R.id.main_layout на id вашего главного представления mainView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { @Override public void onGlobalLayout() { Rect r = new Rect(); mainView.getWindowVisibleDisplayFrame(r); int screenHeight = mainView.getRootView().getHeight(); // Высота скрывающейся клавиатуры int keyboardHeight = screenHeight - r.bottom; // Проверяем, активна ли клавиатура boolean isKeyboardShown = keyboardHeight > screenHeight * 0.15; // 0.15 - это процентная часть, которую считаем достаточно большой для определения активности клавиатуры // Действия при получении состояния клавиатуры if (isKeyboardShown) { // Клавиатура отображается } else { // Клавиатура скрыта } } });
Код выше добавляет слушатель событий OnGlobalLayoutListener
ко всем иерархиям представлений, поэтому вы можете получить уведомление каждый раз при изменении размера активной клавиатуры. Выполнение кода в if
и else
блоках зависит от состояния клавиатуры.
2. Получение высоты клавиатуры
Высота клавиатуры может быть получена с помощью вычитания координат r.bottom
от высоты корневого представления screenHeight
. Затем это значение (keyboardHeight
) может использоваться для выполнения необходимых задач, таких как изменение размера элементов пользовательского интерфейса или анимации.
Учтите, что между вызовами слушателя событий OnGlobalLayoutListener
может происходить множество событий (включая изменение размера окна приложения или переключение между различными вариантами клавиатуры), поэтому ваш код должен быть достаточно гибким для обработки этих изменений.