在Android

时间:2016-10-08 21:09:44

标签: android height screen statusbar

我在这里看了很多类似的问题,但我仍然无法以像素为单位获得完整的高度(减去状态栏和导航栏)。

我的主要设备是纵向模式下的Nexus 10(1600 x 2560)和分辨率为720x1280的手机,我的应用程序以“沉浸模式”(粘性)运行。

基本上,如果我这样做:

metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);
width = metrics.widthPixels;
height = metrics.heightPixels+navigationBarHeight;

在Nexus 10平板电脑上,它返回2464 - 而不是全高 - 当用户向上滑动时,屏幕底部有一个“软”导航栏。 在手机上,它返回1280 - 正确的全高 - 手机没有显示导航栏 - 它有物理按钮,所以这两个都有意义。

现在,如果我先这样做:

int navigationBarHeight = 0;

    int resource = getResources().getIdentifier("navigation_bar_height", "dimen", "android");
    if (resource > 0) {
        navigationBarHeight = getResources().getDimensionPixelSize(resource);
    }

在Nexus 10上,它返回96.我只需将导航栏高度添加到之前获得的高度,如下所示:

width = metrics.widthPixels+navigationBarHeight;

在Nexus 10上 - 我们得到2560,应用程序全屏运行。完美而有意义。

但是,上面的代码,也会在手机上返回96。我不明白为什么会这样 - 这款手机没有软导航条,为什么这不会返回0? 我的代码将它们加在一起,得到1376,这显然不正确(应该是1280)

另外,奇怪的是,即使'状态栏'返回49,也不会从DisplayMetrics返回的高度中减去 - 我不明白为什么。

我还应该注意,我需要一个适用于Gingerbread的解决方案。

0 个答案:

没有答案