getDisplayMetrics()。heightPixels不准确

时间:2015-12-12 20:24:12

标签: android android-layout

我有以下代码:

protected void onCreate(Bundle savedInstanceState) {
//...
requestWindowFeature(Window.FEATURE_NO_TITLE);
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
screenW = getResources().getDisplayMetrics().widthPixels;
screenH = getResources().getDisplayMetrics().heightPixels;
//...
}

getDisplayMetrics()给出1024x600屏幕W = 1024和screenH = 552 这正是我需要的,它只给出了不包括状态栏的屏幕。 但对于某些屏幕,它给出了屏幕的宽度和高度,包括状态栏。(如screenW = 1024和screenH = 600)我已经尝试过GenyMotion中的屏幕,getDisplayMetrics()返回一些屏幕的宽度和高度包括状态栏和除状态栏之外的其他屏幕。 对于具有1080x1920屏幕的三星Galaxy S4,它返回screenW = 1920和screenH = 1080。 (这里我意识到显示器已旋转)对于1024x768屏幕的平板电脑,它返回screenW = 1024和screenH = 720。

有很多功能,比如

    getWindowManager().getDefaultDisplay().getMetrics(metrics);
    getWindowManager().getDefaultDisplay().getRectSize(rectTemp);
    getWindowManager().getDefaultDisplay().getSize(p);

但是所有这些屏幕都为屏幕尺寸提供了屏幕尺寸,包括状态栏和其他不包括状态栏的屏幕尺寸。 但是我发现了

getWindowsManager().getDefaultDisplay().getRealmetrics(metrics)

总是给出包括状态栏的大小。

那么,除了状态栏之外,你有什么建议获得屏幕的宽度和高度?

1 个答案:

答案 0 :(得分:1)

如果您总是获得包括状态栏在内的屏幕高度,并且您希望它没有状态栏高度,则可以简单地计算状态栏高度并从中减去。要获取状态栏高度,可以使用以下代码。

public int getStatusBarHeight() {
    int statusBarHeight = 0;
    int resourceId = getResources().getIdentifier("status_bar_height", "dimen", "android");
    if (resourceId > 0) {
        statusBarHeight = getResources().getDimensionPixelSize(resourceId);
    }
    return statusBarHeight;
}