Android 获取屏幕高和宽(不包含/包含虚拟按键),状态栏的高度

在网上找的获取屏幕宽度高度的方法多有不准确的,这里以自己手机作为测试,总结一些准确的方法,故有此文。
下文的高指手机从上到下的长度,宽指从左到右的长度。
1.Android 获取屏幕高和宽(不包含虚拟按键)
一般需要知道的,就是这种不包含虚拟按键的高度,因为任何控件布局 都不可能悬浮在显示出来的虚拟按键之上。这种方法获得的高和宽,在有无虚拟按键时是不一样的,它所得的值是不包含虚拟按键部分的高和宽。

WindowManager manager = this.getWindowManager();
        DisplayMetrics outMetrics = new DisplayMetrics();
        manager.getDefaultDisplay().getMetrics(outMetrics);
        int width = outMetrics.widthPixels;
        int height = outMetrics.heightPixels;

2.Android 获取屏幕高和宽(包含虚拟按键,即手机屏幕真实的高和宽)
如下获取的值,在有无虚拟按键时都是一致的。因为虚拟按键在Android 4.4开始才会有,所以下面有一个判断

  WindowManager windowManager =
                (WindowManager) getApplication().getSystemService(Context.
                WINDOW_SERVICE);
        final Display display = windowManager.getDefaultDisplay();
        Point outPoint = new Point();
        if (Build.VERSION.SDK_INT >= 19) {
            // 可能有虚拟按键的情况
            display.getRealSize(outPoint);
        } else {
            // 不可能有虚拟按键
            display.getSize(outPoint);
        }
        int mRealSizeWidth;//手机屏幕真实宽度
        int mRealSizeHeight;//手机屏幕真实高度
        mRealSizeHeight = outPoint.y;
        mRealSizeWidth = outPoint.x;

3.获取状态栏高度
可以在任意地方调用获取状态栏高度,是目前我知道的唯一一种可以在onCreate()方法中调用,并直接获得准确状态栏高度的方法。注意,当隐藏状态栏时,这个方法同样会返回状态栏显示出来时的值,不会显示0。

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

猜你喜欢

转载自blog.csdn.net/htwhtw123/article/details/79949789