Android中DisplayMetrics类获取屏幕尺寸
“缘起”
平时上班忙,没太多时间给自己充电,趁着过端午节敲敲代码练练手,在我想要把PopupWindow高度设置成屏幕高度的1/3时,发现获取到的屏幕高度有问题。
打印日志如下:
2019-06-07 18:37:03.230 27737-27737/customizedView.demmo.com E/znk: onClick: getWindowHeight == 2040
2019-06-07 18:37:03.231 27737-27737/customizedView.demmo.com E/znk: onClick: getWindowWidth == 1080
2019-06-07 18:37:03.232 27737-27737/customizedView.demmo.com E/znk: onClick: getRelHeight == 2160
而我用adb命令获取到的屏幕高度是2160(此处的单位是像素,且是绝对像素,即设备物理像素)
通过自定义的getWindowHeightOrWidth方法获取的屏幕高度是2040,方法定义如下:
[code] public static int getWindowHeightOrWidth(Activity activity, int flag) { DisplayMetrics dm = activity.getResources().getDisplayMetrics(); //取得窗口属性 activity.getWindowManager().getDefaultDisplay().getMetrics(dm); //窗口高度 int screenHeight = dm.heightPixels; //窗口的宽度 int screenWidth = dm.widthPixels; //可以通过DisplayMetrics类来获取当前窗口的一些信息,DisplayMetrics对象中,取得的宽高维度是以像素为单位(Pixel),“像素”所指的是“绝对像素”而非“相对像素”, //绝对像素就是设备的物理像素.PS:手机分辨率就是设备像素 Log.e(Constants.TAG, dm.toString()); return flag == 0 ? screenHeight : screenWidth; }
为什么获取的高度会小于手机实际高度?原因是这个方法获取的是手机屏幕显示高度,不包含虚拟导航栏,源码的注释是这么写的:大概意思是说如果我们通过Actiivty的引用调用getWindowManager()或者getSystemService(Context.WINDOW_SERVICE)获取WindowManager,那么获取到的尺寸可能小于实际物理尺寸。
解决方案
而真实的高度要通过如下方法获取:
[code] /** * 获取屏幕完整高度(屏幕展示高度+导航栏)[针对具有导航栏的手机] */ public static int getRelHeight(Activity activity) { DisplayMetrics dm = new DisplayMetrics(); int realScreenH = 0; if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {//好像是4.2之后才有的虚拟导航栏,目前市面上绝大多数手机都有导航栏 activity.getWindowManager().getDefaultDisplay().getRealMetrics(dm); realScreenH = dm.heightPixels; return realScreenH; } return getWindowHeightOrWidth(activity,Constants.WINDOW_HEIGHT); }
有写的不对的地方,欢迎大佬们指正!此博客项目源码地址:https://github.com/ZNKForSky/CustomizedView 欢迎各位童鞋star~
- Android使用Displaymetrics类获取一下手机屏幕中的一些信息
- Android 获取屏幕尺寸与密度
- Android获取屏幕尺寸
- Android获取手屏幕尺寸
- Android 获取屏幕尺寸与密度
- android 获取控件位置坐标,屏幕尺寸,标题栏,状态栏高度
- Android屏幕宽高获取和尺寸单位
- Android获取屏幕尺寸
- Android屏幕尺寸的获取及dp和px的区别和转换
- android获取屏幕的物理尺寸
- Android 之实用小代码-获取屏幕尺寸、判断是否是平板、文字颜色、点击效果、计算字宽等。
- Android屏幕分辨率,尺寸获取问题
- Android计量单位px,in,mm,pt,dp,dip,sp和获取屏幕尺寸与密度
- Android 获取屏幕尺寸与密度
- android 获取屏幕尺寸与密度
- android 获取屏幕尺寸,设置屏幕方向
- android获取屏幕尺寸、密度
- Android 获取屏幕尺寸与密度
- Android 获取屏幕尺寸与密度
- Android 获取屏幕尺寸与密度