如何获取设备真实总宽高?代码获取值与标称不符求助
嘿,这个问题我太熟悉了!你拿到的尺寸比设备标称的小,核心原因是系统状态栏(Status Bar)和虚拟导航栏(Navigation Bar)占用了部分屏幕空间——你用的getMetrics()方法返回的是当前应用能实际使用的显示区域,不是屏幕的物理总尺寸。
下面给你两种解决思路:
1. 获取屏幕真实物理尺寸(包含系统栏)
从Android API 17(Jelly Bean MR1)开始,系统提供了getRealMetrics()方法,它能直接返回屏幕的完整像素值,不管系统栏是否存在。代码示例:
DisplayMetrics displayMetrics = new DisplayMetrics(); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) { getWindowManager().getDefaultDisplay().getRealMetrics(displayMetrics); } else { // 针对旧版本的兼容方案(API <17) getWindowManager().getDefaultDisplay().getMetrics(displayMetrics); } int realScreenWidth = displayMetrics.widthPixels; int realScreenHeight = displayMetrics.heightPixels;
用这个方法拿到的数值应该就和你设备标称的600x1024一致了。
2. 区分应用可用区和全屏区
如果你需要同时知道应用能使用的区域和屏幕总尺寸,可以同时调用两个方法:
getMetrics():返回当前Activity的可用显示区域(已扣除状态栏、导航栏)getRealMetrics():返回屏幕物理总尺寸
这样你就能清楚知道系统栏占用了多少空间,方便做适配。
另外补充个小知识点:如果你的应用设置了全屏模式(比如隐藏状态栏和导航栏),那getMetrics()返回的数值也会和屏幕总尺寸一致哦。
内容的提问来源于stack exchange,提问作者Nick
相关产品推荐
相关产品推荐

