android获取屏幕大小包括状态栏和软件导航栏的大小

时间:2014-10-31 12:08:45

标签: android android-screen

如何使用导航栏和状态栏包含屏幕大小?

我已尝试使用DisplayMetrics获取尺寸,但尺寸并未包含软件导航栏。

1 个答案:

答案 0 :(得分:10)

自API 17(JELLY_BEAN_MR1)以来添加了

软件导航,因此我们只需要在API 17及更高版本中包含导航栏的大小。 请注意,当您获得屏幕尺寸时,它会基于当前方向。

public void setScreenSize(Context context) {
    int x, y, orientation = context.getResources().getConfiguration().orientation;
    WindowManager wm = ((WindowManager) 
        context.getSystemService(Context.WINDOW_SERVICE));
    Display display = wm.getDefaultDisplay();
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB_MR2) {
        Point screenSize = new Point();
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
            display.getRealSize(screenSize);
            x = screenSize.x;
            y = screenSize.y;
        } else {
            display.getSize(screenSize);
            x = screenSize.x;
            y = screenSize.y;
        }
    } else {
        x = display.getWidth();
        y = display.getHeight();
    }

    int width = getWidth(x, y, orientation);
    int height = getHeight(x, y, orientation);
}

private int getWidth(int x, int y, int orientation) {
    return orientation == Configuration.ORIENTATION_PORTRAIT ? x : y;
}

private int getHeight(int x, int y, int orientation) {
    return orientation == Configuration.ORIENTATION_PORTRAIT ? y : x;
}

link to gist -> here