android 监听系统键盘显隐

//系统键盘是否显示
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;
}

你可能感兴趣的:(android知识库)