//系统键盘是否显示
private boolean isKeyBoardShow;
private ViewTreeObserver.OnGlobalLayoutListener mOnGlobalLayoutListener = new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
isKeyBoardShow = isKeyboardShow(mLayoutRoot);//mLayoutRoot为根布局
if (isKeyBoardShow) {
//TODO 系统键盘显示
} else{
//TODO 系统键盘隐藏
}
}
};
private void initViews(){
//mLayoutRoot为根布局
ViewTreeObserver viewTreeObserver = mLayoutRoot.getViewTreeObserver();
viewTreeObserver.addOnGlobalLayoutListener(mOnGlobalLayoutListener);
}
@Override
protected void onDestroy() {
ViewTreeObserver viewTreeObserver = mLayoutOuter.getViewTreeObserver();
if (viewTreeObserver.isAlive()) {
if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.JELLY_BEAN) {
viewTreeObserver.removeGlobalOnLayoutListener(mOnGlobalLayoutListener);
} else {
viewTreeObserver.removeOnGlobalLayoutListener(mOnGlobalLayoutListener);
}
}
super.onDestroy();
}
/**
* 是否软键盘显示
*
* @param rootView
* @return
*/
private boolean isKeyboardShow(View rootView) {
Rect r = new Rect();
rootView.getWindowVisibleDisplayFrame(r);//获取当前窗口可视区域大小(不包含键盘遮挡部分)
int heightDiff = r.bottom - rootView.getBottom();//所以可以据此判断键盘是否显示
return heightDiff < 0;
}