В процессе работы над приложением передо мной встала задача: отследить открытие и закрытие пользователем экранной клавиатуры. При открытой клавиатуре была видна только половина экрана, поэтому в момент выползания клавиатуры у меня включалась возможность вертикального скролла, но реализация этого - тема для отдельной статьи =)
Итак, наша задача:
Мы назначаем для нашего activity OnGlobalLayoutListener. Он отслеживает изменение видимой части экрана - как раз то, что нам нужно. Мы создаём прямоугольник с координатами видимого пространства, а также имеем доступ к высоте нашего RootView с помощью .getRootView().getHeight(). Узнав разницу между этими двумя значениями, мы всегда сможем определить, что открыта экранная клавиатура.
Итак, наша задача:
- отследить открытие пользователем экранной клавиатуры
По каким параметрам можно определить, что клавиатура открыта? Сразу приходит на ум одно явное изменение - изменилась видимая область экрана. Нижнюю часть теперь скрывает клавиатура. Попробуем отследить изменение видимой области.
Вот полная реализация кода отслеживания изменения размеров видимой области:
final View activityRootView = findViewById(android.R.id.content);
activityRootView.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
public void onGlobalLayout() {
Rect r = new Rect();
//создаём прямоугольник r с координатами видимого пространства
activityRootView.getWindowVisibleDisplayFrame(r);
//Вычисляем разницу между высотой нашего View и высотой видимого пространства
int heightDiff = activityRootView.getRootView().getHeight() - (r.bottom - r.top);
if (heightDiff > 100) { // Если разница > 100px, то скорее всего открыта клавиатура
//Пишем тут необходимые действия и выводим в лог высоту View, высоту видимой области и их разность.
Log.d("mylog","rootHeight = " + activityRootView.getRootView().getHeight());
Log.d("mylog","(r.bottom - r.top) = " + (r.bottom - r.top));
Log.d("mylog","heightDiff = " + heightDiff);
}
}
});
Мы назначаем для нашего activity OnGlobalLayoutListener. Он отслеживает изменение видимой части экрана - как раз то, что нам нужно. Мы создаём прямоугольник с координатами видимого пространства, а также имеем доступ к высоте нашего RootView с помощью .getRootView().getHeight(). Узнав разницу между этими двумя значениями, мы всегда сможем определить, что открыта экранная клавиатура.
Комментариев нет:
Отправить комментарий