У меня была такая же проблема в приложении, которое я написал некоторое время назад.Сейчас оно прекращено, но это не ваш вопрос xD.
На самом деле нет возможности отслеживать такую операцию, но я нашел отличное (более или менее) решение для добавления такой функциональности.Это довольно просто в теории, но я думаю, что это «взлом».
Так что вам понадобится пользовательский линейный макет, который содержит ваше приложение или особый регион.После этого вы должны добавить его слушатель.И это будет работать только в портретном режиме.
Так вот к коду: (извините, но я не могу вспомнить источник)
Пользовательский макет:
LinearLayoutThatDetactsSoftwarekeyboard.java (это оригинальное название макета xD)
package com.tundem.people.Layout;
import android.app.Activity;
import android.content.Context;
import android.graphics.Rect;
import android.util.AttributeSet;
import android.widget.LinearLayout;
/*
* LinearLayoutThatDetectsSoftKeyboard - a variant of LinearLayout that can detect when
* the soft keyboard is shown and hidden (something Android can't tell you, weirdly).
*/
public class LinearLayoutThatDetectSoftkeyboard extends LinearLayout {
public LinearLayoutThatDetectSoftkeyboard(Context context, AttributeSet attrs) {
super(context, attrs);
}
public interface Listener {
public void onSoftKeyboardShown(boolean isShowing);
}
private Listener listener;
public void setListener(Listener listener) {
this.listener = listener;
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int height = MeasureSpec.getSize(heightMeasureSpec);
Activity activity = (Activity) getContext();
Rect rect = new Rect();
activity.getWindow().getDecorView().getWindowVisibleDisplayFrame(rect);
int statusBarHeight = rect.top;
int screenHeight = activity.getWindowManager().getDefaultDisplay().getHeight();
int diff = (screenHeight - statusBarHeight) - height;
if (listener != null) {
listener.onSoftKeyboardShown(diff > 128); // assume all soft
// keyboards are at
// least 128 pixels high
}
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
}
}
И как вы добавляете слушателя:
final LinearLayoutThatDetectSoftkeyboard lltodetectsoftkeyboard = (LinearLayoutThatDetectSoftkeyboard) findViewById(R.id.LinearLayout_SoftKeyboard);
lltodetectsoftkeyboard.setListener(new Listener() {
public void onSoftKeyboardShown(boolean isShowing) {
if (actMode == MODE_SMS && isShowing) {
findViewById(R.id.LinearLayout_bottomnavigationbar).setVisibility(View.GONE);
} else {
findViewById(R.id.LinearLayout_bottomnavigationbar).setVisibility(View.VISIBLE);
}
}
});
LinearLayout добавляет слушателя, который будетвызывается каждый раз, когда компоновка высоты изменяется как минимум на 128 пикселей.Это хитрость, и она не будет работать с клавиатурами, размер которых меньше 128 пикселей (но я думаю, что каждая клавиатура имеет такую высоту). Если LayoutHeight изменился, вы получите уведомление, отображается ли он сейчас или нет.
Надеюсь, мой ответ был полезен.Возможно, вы снова найдете реальный источник здесь, на StackOverFlow.Я не буду красть кого-то гения так.Кредиты достаются неизвестному человеку;)