今天发现,小米8手机获取屏幕高度的方法不准确,进过一些测试以后发现是虚拟导航按键出了问题。

这里获取屏幕高度的方法用的是

public static int getScreenHeight(Activity activity) {DisplayMetrics dm = new DisplayMetrics();activity.getWindowManager().getDefaultDisplay().getMetrics(dm);int height = dm.heightPixels;return height;}

我们知道这个方法获取屏幕高度的时候

1.当屏幕有虚拟按键的情况下,获取的是屏幕顶部到虚拟按键上部的距离。

2.当屏幕没有虚拟按键的情况下,获取的是屏幕顶部到屏幕底部的距离。

因为我们的页面元素一般不希望被虚拟按键遮挡,所以这个方法一般是我们所希望的。

但是经过测试,小米8手机在虚拟按键未设置的情况下,依然返回的是情况1的高度。这样返回的高度实际缺少了虚拟按键的高度。

根据查阅资料,我猜测是因为获取虚拟按键状态的系统方法在小米系统内不能正常使用,导致这个获取屏幕高度的方法认为虚拟按键是开启状态。(因为懒,所以没去深究源码)。

既然知道了原因,接下来就是去解决了。

直接上代码

获取高度的方法

     /*** 获取屏幕高度** @param activity* @return*/public static int getScreenHeight(Activity activity) {DisplayMetrics dm = new DisplayMetrics();activity.getWindowManager().getDefaultDisplay().getMetrics(dm);int height = dm.heightPixels;return height+BottomBtnUtils.getMiSupplementHeight(activity);}

获取需要补充的高度

/*** 获取需要补充的高度* @param context* @return*/public static int getMiSupplementHeight(Context context) {int result = 0;//是否是小米系统,不是小米系统则不需要补充高度if(MiUtils.isMIUI()) {if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1&& Settings.Global.getInt(context.getContentResolver(), "force_fsg_nav_bar", 0) == 0) {//如果虚拟按键已经显示,则不需要补充高度} else {//如果虚拟按键没有显示,则需要补充虚拟按键高度到屏幕高度Resources res = context.getResources();int resourceId = res.getIdentifier("navigation_bar_height", "dimen", "android");if (resourceId > 0) {result = res.getDimensionPixelSize(resourceId);}}}return result;}

小米获取屏幕高度不准确-小米获取屏幕高度的兼容方案相关推荐

  1. note2 android8.0,小米Android 8.0再添丁!小米Note 2国际版MIUI9获推送

    上周,小米5国际版MIUI 9系统已经获得Android 8.0的更新推送,据消息显示,小米Note 2是与小米5一起获得更新推送的,不过不知出于什么原因小米方面撤销了推送,但之前的官方下载地址依旧有 ...

  2. 小米手环4怎么使用_小米手环4入手评测 小米手环4怎么使用

    很早就有听到小米手环4发布的消息,现在终于跟大家正式见面了,很多小伙伴还是对这款产品处于观望的态度,想更深入的了解它,这样才敢放心的购买.下面小编为大家带来用户分享的小米手环4入手使用测试,大家可以参 ...

  3. 小米鸿蒙os界面,早报 | 小米官宣第二款5G机;鸿蒙OS系统界面首曝

    *文章由腾讯数码与太平洋电脑网联合发布 过去24小时必读 45W超级快充加持,小米官宣第二款5G旗舰即将登场 8月6日消息,小米在官微公布了小米的5G历程.而官方介绍,小米从2015年已经开始参与3G ...

  4. 小米9se是Android6吗,小米9SE评测 优缺点十分明显

    当一众小屏手机开始消失时,如 iPhone SE.Sony Xperia Compact 系列等都不再发布新一代机型.小屏手机用户该何去何从? 去年,小米8周年发布会上与小米8一同推出的小屏手机,小米 ...

  5. 小米10青春版和小米10有什么区别 哪个好

    小米10外观上,小米10采用了6.67"AMOLED小挖孔曲面屏,支持90Hz刷新率,180Hz触控采样率.包罗阳光屏3.0,峰值亮度1120nit亮度,5000000:1对比度.而且采用柔 ...

  6. 浅析从小米造车背后探索小米集团的企业网络推广策略会有怎样的灿烂

    日前,有关小米集团造车的消息在业内掀起巨大波澜,尽管多家媒体仍在扑风捉影,小米集团也给出了否认的答案缺一就不肯停歇.其实小米集团除了在造车上掀起波澜,在该集团旗下所带来的企业网络推广策略中也有着领先同 ...

  7. 小米6自动重启android,小米6充电重启怎么办 小米6充电自动重启解决方法

    小米6充电重启怎么办 小米6充电自动重启解决方法 来源:www.18183.com作者:似水流年时间:2017-05-04 小米6充电重启怎么办呢?本文小编为您带来小米6充电重启怎么办 小米6充电自动 ...

  8. 小米10Pro手机双击android,小米10Pro:不完美,但很小米。

    小米10Pro:不完美,但很小米. 2020-03-15 17:54:51 37点赞 22收藏 106评论 创作立场声明:手机自购,欢迎友好探讨,拒绝狂热米粉与海军. 本文图片很少,基本不涉及客观评测 ...

  9. 小米登录协议分析_小米回应小米11充电头兼容问题

    小米11从上市销售至今已经几天时间,相信第一批入手的消费者也都收到了这款骁龙888旗舰.从网友们的使用反馈来看,小米11(点此查看评测)在充电方面出现了一些问题,并且该问题现在得到了官方的回应.元旦期 ...

  10. 小米max2 android p,这就是小米Max2?6.4英寸超大屏幕配置大升级

    标签:小米手机(3463)小米(3233) 虽说今年上半年小米6的重磅机型会是小米6,但随着小米Max在官方商城的下架,这款巨屏手机的更新换代产品已经在网络上浮出水面.根据知名图形测试网站GFXBen ...

最新文章

  1. Star: Ubuntu下配置和编译cpp-ethereum客户端启动GPU加速交易
  2. 【❤️Mark一下❤️】markdown中写上标、下标
  3. sql查询两个表结果相减_SQL 操作结果集 -并集、差集、交集、结果集排序
  4. react native使用百度echarts显示图表
  5. 游戏服务器端引擎——DogSE的设计
  6. PAT (Basic Level) 1058 选择题(模拟)
  7. java rmi jrmp_关于Java 中 RMI、JNDI、LDAP、JRMP、JMX、JMS那些事儿(上)看后的一些总结-1...
  8. 读《系统虚拟化-原理与实现》-第三章
  9. dnn神经网络 缺点_抄近路神经网络如何因找捷径而犯错
  10. 如何实现快速高效开发?低代码平台jeecgboot完美解决—jeecgboot3.1新特性
  11. 前n个正整数相乘的时间复杂度为_初一数学常考的21个知识点,掌握好,轻松110+!...
  12. 中国水刀切割机(水刀切割机)行业市场供需与战略研究报告
  13. LindAgile~缓存拦截器支持类的虚方法了
  14. 肝毒净-道格拉斯实验室
  15. (附源码)springboot自律健身房会员管理系统 毕业设计456466
  16. Windows Dos命令
  17. 手机端用云服务器文件在哪里设置,如何使用FolderSync在安卓手机上同步文件夹到坚果云? | 坚果云帮助中心...
  18. 多模态训练如何平衡不同模态
  19. 科学计算机技术标准差,自动化技术_计算机技术_
  20. 不积跬步无以至千里,不积小流无以成江海----SAX读取xml

热门文章

  1. 《舵机控制基本原理》
  2. xmapp环境搭建注意事项
  3. java HTML转PDF实现
  4. 两大虚拟桌面厂商的系统镜像管理对比
  5. tfidf算法 python_Python TFIDF计算文本相似度
  6. 2022蓝牙耳机哪款更值得买?最受欢迎的十大蓝牙耳机排行榜
  7. Android不发版也能在线修Bug?——AndFix 框架
  8. PyCharm大学生教育账户激活
  9. Java基础系列:读取yml文件
  10. android 字体显示框架,XUI 一个简洁而又优雅的Android原生UI框架