1.判断NavigationBar是否显示

首先看几组数据

vivo-X21A:        screenRealSize : 2280 , screenHeight : 2201, statusBar : 84, navigationBar : 126(Android9导航栏一键)

vivo-X21A:        screenRealSize : 2280 , screenHeight : 2075, statusBar : 84, navigationBar : 126 (Android9导航栏三键)
vivo-X21A:        screenRealSize : 2280 , screenHeight : 2201, statusBar : 84, navigationBar : 126  (Android9手势)

meizu:               screenRealSize : 1280 , screenHeight : 1280, statusBar : 44, navigationBar : 96 (Android6,物理导航栏)

huaWei-PTC10: screenRealSize : 2310 , screenHeight : 2208, statusBar : 102, navigationBar : 0   (隐藏nvg, Android10)

huawei-PTC10: screenRealSize : 2310 , screenHeight : 2090, statusBar : 102, navigationBar : 118 (显示nvg, Android10)

huawei-xx1:      screenRealSize : 1920 , screenHeight : 1808, statusBar : 72, navigationBar : 112  (显示nvg, Android9)

huawei-xx1:      screenRealSize : 1920 , screenHeight : 1920, statusBar : 72, navigationBar : 112 (隐藏nvg, Android9)

huawei-xx2:     screenRealSize : 1560 , screenHeight : 1422, statusBar : 54, navigationBar : 84 (显示nvg, Android9)

huawei-xx2:    screenRealSize : 1560 , screenHeight : 1506, statusBar : 54, navigationBar : 0 (隐藏nvg, Android9)

将就着看吧,可以发现,华为最近出的手机的screenHeight不包含statusBar和navigationBar的高度,导航栏不显示的时候,获取到的navigationBar高度也不一样。

而我手上的vivo手机就更奇葩了,居然出现screenHeight + statusBar > screenRealSize的情况 !!显然vivo这款手机的screenheight也是不包含statusBar的高度的。

而老机型的魅族,screenHeight = screenRealHeight, 这还是很好理解的。

总之,想要直接获取navigationBar的高度来判断是否显示了导航栏是不行的。因为市场上的定制系统是在是乱的不醒。

最后的办法:

val isNavigationBarShow: Booleanget() {val windowManager =appContext?.getSystemService(Context.WINDOW_SERVICE) as? WindowManagerval display = windowManager?.defaultDisplayval size = Point()val realSize = Point()display?.getSize(size)display?.getRealSize(realSize)// 如果显示了NavigationBar, statusBarHeight < navigationBarHeightreturn realSize.y > size.y + statusBarHeight}

2.判断屏幕显示的高度,可见高度+statusBar的高度

val screenHeight: Intget() {val windowManager =appContext?.getSystemService(Context.WINDOW_SERVICE) as? WindowManagerval display = windowManager?.defaultDisplayval realSize = Point()display?.getRealSize(realSize)return if (isNavigationBarShow) {realSize.y -  navigationBarHeight} else {realSize.y}}

判断NavigationBar是否显示,获取屏幕高度相关推荐

  1. android 获取navigationbar 高度,Android判断NavigationBar是否显示的方法(获取屏幕真实的高度)...

    有些时候,我们需要知道当前手机上是否显示了NavigationBar,也就是屏幕底部的虚拟按键. 比如截屏的时候,要获取屏幕的高度,必须包括NavigationBar的高度. 试过网上的多种方法,但是 ...

  2. 聊聊获取屏幕高度这件事

    问题的起因是我发现 PopupWindow弹出位置不正确时发现的.其实早在两年多前,我就发现我手上的小米MIX2s 获取屏幕高度不正确,后面参考V2EX 的这篇帖子处理了.最近又一次做到类似功能,发现 ...

  3. 华为手机获取状态栏高度是错误的_聊聊获取屏幕高度这件事

    问题的起因是我发现 PopupWindow弹出位置不正确时发现的.其实早在两年多前,我就发现我手上的小米MIX2s 获取屏幕高度不正确,后面参考V2EX 的这篇帖子处理了.最近又一次做到类似功能,发现 ...

  4. thymeleaf 判断页面不显示_Thymeleaf 中 Spring Security 的使用 0151

    Spring Security 可以在一些视图技术中进行控制显示效果.例如: JSP 或 Thymeleaf.在非前后端分离且使用 Spring Boot 的项目中多使 用 Thymeleaf 作为视 ...

  5. Android 获取屏幕高度,虚拟导航键检测

    本篇文章主要总结一下在全面屏上获取高度的问题. 获取屏幕高度 一般 Android 上获取设备的高度都是通过 DefaultDisplay 的方式来获取的如下: public int getScree ...

  6. android 虚拟导航监听,Android另类判断NavigationBar虚拟导航栏状态

    好久没码字了,所以出来冒个泡 一直用着华为的手机,从一开始就觉得华为的虚拟导航栏用着还是挺顺手的,后来发现越来越多的机子都开始使用起来,查看源码发现,虚拟导航栏是属于SystemUI的一部分. 再一看 ...

  7. 小程序中获取屏幕高度及iPhoneX适配问题

    屏幕高度问题 小程序中有时候需要获取屏幕高度使用,简单的通过wx.getSystemInfo即可获取到手机的系统信息 wx.getSystemInfo中有3个高度,分别是: screenHeight: ...

  8. android屏幕密度高度,Android获取常用辅助方法(获取屏幕高度、宽度、密度、通知栏高度、截图)...

    我们需要获取Android手机或Pad的屏幕的物理尺寸,以便于界面的设计或是其他功能的实现.下面就分享一下Android中常用的一些辅助方法: 获取屏幕高度: /** * 获得屏幕高度 * @para ...

  9. android 图片横竖判断_Android应用开发之android 判断ImageView当前显示的是哪一张图片...

    本文将带你了解Android应用开发之android   判断ImageView当前显示的是哪一张图片,希望本文对大家学Android有所帮助. 判断ImageView当前显示的是哪一张图片 Java ...

最新文章

  1. 从指定URL中提取文件名
  2. CentOS6.8 mediawiki安装
  3. 通过改进视频质量评估提升编码效率
  4. MCMC 和 Gibbs采样
  5. Freeswitch之ASR(语音识别)总结大全
  6. 今天的捉蝴蝶真有趣的 格式工厂
  7. spark学习-51-Spark的task任务的运行
  8. Docker安装Nacos教程
  9. 彻底搞定 Java 注解
  10. 【树莓派】在树莓派的Android系统中安装APK应用
  11. java 访问Domino LOtus 数据库
  12. Mac数据库可视化工具,workbench完全替代Navicat和PowerDesigner,Oracle官方免费可视化工具workbench!!
  13. 大一大学计算机应用基础课后简答题,2017大一计算机应用基础试题及答案
  14. 微信群二维码七天失效如何解决?有没有办法创建一个长期有效的微信群?
  15. 十大虚拟化最佳实践(转自Wes Miller的文章)
  16. 触摸屏是怎么控制PLC的?
  17. 问题 F: 求一个3*3矩阵对角线元素之和
  18. validation accuracy vs train accuracy
  19. springboot学习(六十七) springboot项目通过gradle-docker-plugin插件构建为doker镜像并推送至镜像私服
  20. PLC脆弱性评估及相应解决方案

热门文章

  1. 第2章:将磅数转换为千克数
  2. cad中直径符号不显示_CAD导图中常见的4个烦人问题,解决方案都在这里,还不收藏一波?...
  3. 【白苹果系统镜像】macOS Monterey 12.4beta3(21F5063e)镜像
  4. FSR-Unity-URP 1.0 的性能和兼容性问题
  5. lenovo L480 进入bios_ThinkPad如何升级BIOS?我来教你!
  6. 每日一题--设计一个呼叫中心系统(Google面试推荐书Cracking the Coding Interview)
  7. 图片缓存框架解析与设计
  8. 汇编语言(第三版)王爽著(实验八)分析一个奇怪的程序
  9. 深圳Maker Faire创客市集:国内外创客组团来参展
  10. Python小数向上取整和向下取整