获取软键盘高度

private static int getDecorViewInvisibleHeight(final Activity activity) {
        final View decorView = activity.getWindow().getDecorView();
        if (decorView == null)
            return sDecorViewInvisibleHeightPre;
        final Rect outRect = new Rect();
        decorView.getWindowVisibleDisplayFrame(outRect);
        Log.d("KeyboardUtils", "getDecorViewInvisibleHeight: "
                + (decorView.getBottom() - outRect.bottom));
        int delta = Math.abs(decorView.getBottom() - outRect.bottom);
        if (delta <= getNavBarHeight()) {
            sDecorViewDelta = delta;
            return 0;
        }
        return delta - sDecorViewDelta;
    }

以上代码可以正确获取到软键盘的高度,同理可得判断软键盘是否显示的方法:

 public static boolean isSoftInputVisible(final Activity activity) {
        return getDecorViewInvisibleHeight(activity) > 0;
    }

科普DocorView见链接:https://blog.csdn.net/nihaomabmt/article/details/85248700

注:测试时使用samsung s8手机,该手机的导航栏正常状态下隐藏,软键盘显示时会显示,测试时发现当软键盘显示时,DocorView的高度会比不显示时低一个导航栏的高度,猜测是在rom层设置的导航栏高度为0,DocorView在addView的时候加入的导航栏的高度也为0,而在DocorView的上层布局加入显示导航栏,所以如果要正确的监测软键盘的显示和隐藏,并监听布局高度具体变化,建议分别记录软键盘显示隐藏时的高度,通过隐藏时的bottom坐标-显示时的bottom坐标+软键盘高度的方式获取具体的软键盘显示前后布局的高度变化。

你可能感兴趣的:(Android开发)