Android获取屏幕宽高

本文最后更新于:2023年2月3日 下午

本文介绍在Android中获取屏幕宽、高、像素值的方法,示例代码使用Kotlin语言。

获取屏幕高度

方法1 获取当前APP显示区域的屏幕高度

使用此方法得到的屏幕高度值,会忽略底部虚拟导航按键的高度。

1
2
3
4
5
6
fun getScreenHeight(ctx:Context?):Int{
val dm = DisplayMetrics()
val wm = ctx?.getSystemService(Context.WINDOW_SERVICE) as WindowManager
wm.defaultDisplay.getMetrics(dm) //忽略底部虚拟导航按键的高度
return dm.heightPixels
}
1
2
3
4
5
6
fun getScreenHeight(ctx:Context?):Int{
val point = Point()
val wm = ctx?.getSystemService(Context.WINDOW_SERVICE) as WindowManager
wm.defaultDisplay.getSize(point) //忽略底部虚拟导航按键的高度
return point.y
}

推荐使用此种方法。在分屏模式下,用该方法获取的高度值,能够随着APP分屏高度的变化而变化。

方法2 获取手机系统真实的屏幕高度。

使用这种方法,得到的屏幕高度值,与不同手机厂商所使用的Android发行版系统相关。在不同机型中,可能包含手机顶部任务栏高度,也可能不包含顶部任务栏高度。

1
context?.resources?.displayMetrics?.heightPixels

方法3 获取手机系统真实的屏幕高度。

得到的屏幕高度值,包含底部虚拟导航按键的高度。需要Android API>=30

1
2
3
4
5
6
@RequiresApi(Build.VERSION_CODES.R)
fun getScreenHeight(ctx: Context?): Int {
val dm = DisplayMetrics()
ctx?.display?.getRealMetrics(dm)
return dm.heightPixels
}

该方法获取的高度,跟随手机系统。在分屏模式下,用该方法获取的高度值不会随着APP分屏高度的变化而变化。

获取屏幕宽度

方法1 获取当前APP显示区域的屏幕宽度。

1
2
3
4
5
6
fun getScreenHeight(ctx:Context?):Int{
val dm = DisplayMetrics()
val wm = ctx?.getSystemService(Context.WINDOW_SERVICE) as WindowManager
wm.defaultDisplay.getMetrics(dm)
return dm.widthPixels
}

方法2 获取当前手机系统的屏幕宽度。

1
context?.resources?.displayMetrics?.widthPixels

该方法获取的宽度,跟随手机系统。在分屏模式下,用该方法获取的宽度值不会随着APP分屏宽度的变化而变化。

获取屏幕像素值

方法1 获取当前手机系统的屏幕宽度

1
context?.resources?.displayMetrics?.density

方法2 获取当前APP显示区域的屏幕像素

1
2
3
4
5
6
fun getScreenHeight(ctx:Context?):Float{
val dm = DisplayMetrics()
val wm = ctx?.getSystemService(Context.WINDOW_SERVICE) as WindowManager
wm.defaultDisplay.getMetrics(dm)
return dm.density
}

参考

  1. 参考资料1
  2. 参考资料2

Android获取屏幕宽高
http://blog.cnctema.pub/post/zh-CN/096043f08007/
作者
cnctema
发布于
2022年10月13日
许可协议