在网上看很多是重写一个View,如相对布局等,然后在onSizeChanged时做一个回调。这样感觉很麻烦。其实可以在Activity的layout的最顶层View弄一个id,然后通过这个id拿到layout的父View,这样就可以监听了。上代码:
private View root;
root = (RelativeLayout) findViewById(R.id.root_view);
private void rooViewtListener() {
root.getViewTreeObserver().addOnGlobalLayoutListener(
new OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
int heightDiff = root.getRootView().getHeight() - root.getHeight();
Rect rectgle = new Rect();
Window window = getWindow();
window.getDecorView().getWindowVisibleDisplayFrame(rectgle);
int contentViewTop = window.findViewById(Window.ID_ANDROID_CONTENT).getTop();
if (heightDiff <= contentViewTop) {
// Soft KeyBoard Hidden
softInputHidden();
} else {
// Soft KeyBoard Shown
softInputShown();
}
}
}
);
}
这样就简单多了。