转自:http://www.jianshu.com/p/84d951b3f079 简书-十个雨点

有些时候,我们需要知道当前手机上是否显示了NavigationBar,也就是屏幕底部的虚拟按键。

比如截屏的时候,要获取屏幕的高度,必须包括NavigationBar的高度。

试过网上的多种方法,但是对那种可以通过手势来显示/隐藏的NavigationBar没办法,最后终于找到了一个好办法,看代码:

public boolean isNavigationBarShow(){    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
        Display display = getWindowManager().getDefaultDisplay();
        Point size = new Point();
        Point realSize = new Point();        display.getSize(size);        display.getRealSize(realSize);        return realSize.y!=size.y;
    }else {        boolean menu = ViewConfiguration.get(this).hasPermanentMenuKey();        boolean back = KeyCharacterMap.deviceHasKey(KeyEvent.KEYCODE_BACK);        if(menu || back) {            return false;
        }else {            return true;
        }
    }
}public static int getNavigationBarHeight(Activity activity) {    if (!isNavigationBarShow(activity)){        return 0;
    }
    Resources resources = activity.getResources();    int resourceId = resources.getIdentifier("navigation_bar_height",            "dimen", "android");    //获取NavigationBar的高度
    int height = resources.getDimensionPixelSize(resourceId);    return height;
}public static int getSceenHeight(Activity activity) {    return activity.getWindowManager().getDefaultDisplay().getHeight()+getNavigationBarHeight(activity);
}
......我简直烦死华为了......