Android 获取屏幕尺寸、导航栏、状态栏高度

公司要在特定设备上进行开发,拿到设备后提取一下屏幕尺寸参数给UI作图,查找了一些资料发现这方面资料有点凌乱,所以整理一下。

![BOAEUOM8UB2)X)M0)P$8UE.png

//获取宽 
val width=resources.displayMetrics.widthPixels 
//获取高=屏幕显示区的高
val height=resources.displayMetrics.heightPixels
//获取屏幕密度
val densityDpi=resources.displayMetrics.densityDpi

//获取屏幕物理宽高 Android4.2 17以上
val point = Point()
display?.getRealSize(point)
//获取屏幕的宽度
val height = point.x
//屏幕整体高度=屏幕显示区+导航栏
val height = point.y
复制代码

有博客上指出
resources.displayMetrics.heightPixels
在全面屏上该方法无法获取正确的宽高,用下列方式作为替换

val wm = getSystemService(WINDOW_SERVICE) as WindowManager
val dm = DisplayMetrics()
wm.defaultDisplay.getMetrics(dm)
val height = dm.heightPixels
复制代码

但是我测试了多款全面屏手机得到的结果两个一致

获取状态栏高度

方式一

val resources: Resources = context.resources
val resourceId: Int = resources.getIdentifier("status_bar_height", "dimen", "android")
vak barHeight = resources.getDimensionPixelSize(resourceId)
复制代码

方式二 此方法不要再初始化时使用,建议onWindowFocusChanged方法中调用

val rectangle = Rect()
window.decorView.getWindowVisibleDisplayFrame(rectangle)
val barHeight = rectangle.top
复制代码

获取导航栏高度

val resourceId: Int = resources.getIdentifier("navigation_bar_height", "dimen", "android")
val navigationBarHeight = resources.getDimensionPixelSize(resourceId)
复制代码
© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享