在项目的开发过程中,发现小米部分手机有一个全面屏手势功能,该功能可隐藏底部虚拟按键,通过手势的方式来实现返回和Home功能。

效果如下所示:

当开启全面屏手势的时候,就会存在一个问题,我们通过以下代码来获取的屏幕高度

DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);
int height = metrics.heightPixels;

获取到的屏幕高度还是包括底部虚拟按键的高度的,这个时候我们就要针对小米的全面屏做单独的适配处理。

适配处理

是否是小米手机

为了解决这个问题,首先我们要判断当前手机是否是小米手机:

Build.MANUFACTURER.equals("Xiaomi")

如果返回true是小米手机,false 不是

是否开启全面屏手势

判断出是小米手机后,需要判断当前手机是否开启了全面屏手势:

Settings.Global.getInt(context.getContentResolver(), "force_fsg_nav_bar", 0) != 0

如果返回true开启全面屏手机,false 没有

对上述两种方法进行封装处理后:

 /*** 判断是否是小米手机 并且是否开启全面屏** @return*/public static boolean isXiaoMi(Context context) {if (Build.MANUFACTURER.equals("Xiaomi")) {return Settings.Global.getInt(context.getContentResolver(), "force_fsg_nav_bar", 0) != 0;}return false;}

判断是否开启全面屏后,只需要获取底部导航栏的高度,然后,在获取屏幕高度的时候,根据不同的手机设备,动态的设置屏幕的宽高,如果是小米手机且开启全面屏,加上底部导航栏高度即可。

获取底部导航栏高度

/*** 获取底部虚拟按键高度* @param context* @return*/public static int getNavigationBarHeight(Context context) {WindowManager windowManager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);Display display = windowManager.getDefaultDisplay();DisplayMetrics dm = new DisplayMetrics();try {@SuppressWarnings("rawtypes")Class c = Class.forName("android.view.Display");@SuppressWarnings("unchecked")Method method = c.getMethod("getRealMetrics", DisplayMetrics.class);method.invoke(display, dm);return dm.heightPixels - display.getHeight();} catch (Exception e) {e.printStackTrace();}return 0;}

真实的屏幕高度:

     DisplayMetrics metrics = new DisplayMetrics();getWindowManager().getDefaultDisplay().getMetrics(metrics);int height = metrics.heightPixels;if (isXiaoMi(activity)) {height += getNavigationBarHeight(activity);}

通过上述方法,即可获取到真实的屏幕高度。

Android 小米全面屏手势底部虚拟按键的适配相关推荐

  1. react native 安卓(特别是小米手机)全面屏是否开虚拟按键的适配

    react native 安卓(特别是小米手机)全面屏是否开虚拟按键的适配 做rn蛮久了,遇到的坑无数,谢谢大家带我爬过的坑,这次我也来分享一下,希望帮助到有需要的人! 大家先看先后效果对比: 没开虚 ...

  2. 关于android 7.0全面屏,底部虚拟导航键 适配问题

    上图为没适配之前 // 在setContentView之后,适配顶部状态栏 getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCE ...

  3. 一加android8稳定版,一加5T获Android 8.1稳定版升级 全屏手势代替虚拟按键

    原标题:一加5T获Android 8.1稳定版升级 全屏手势代替虚拟按键 虽然一加手机的新旗舰一加6即将发布,但是官方也没有忘记老用户.5月9日夜间,一加5T迎来了稳定版固件更新,除了核心升级为And ...

  4. Android 11.0 自定义仿小米全面屏手势导航左右手势滑动返回UI效果

    目录 1.概述 2.自定义仿小米全面屏手势导航返回ui布局的核心代码 3.自定义左右手势返回UI样式的核心代码功能分析 3.1 NavigationBarView手势导航布局左右手势返回的相关代码 3 ...

  5. 小米和android全面屏手势,小米全面屏手势来了,这三个窍门你务必知晓

    原标题:小米全面屏手势来了,这三个窍门你务必知晓 在2017年年末的最新MIUI 开发版上,针对目前现有的小米全面屏手机,MIUI正式更新了一项重大功能:全面屏手势.由于上周恰逢小米MIX 2进入了安 ...

  6. Android 12.0 自定义仿小米全面屏手势导航左右手势滑动返回UI效果

    目录 1.概述 2.自定义仿小米全面屏手势导航左右手势滑动返回UI效果的核心类

  7. Android 全面屏适配及判断是否为全面屏,全面屏手势和虚拟导航栏的判断

    一,全面屏的适配 全面屏出现后,如果不做适配,屏幕上会出现上下黑边,影响视觉效果. 针对此问题,Android官方提供了适配方案,即提高App所支持的最大屏幕纵横比,实现起来也比较简单,在Androi ...

  8. android app 仿小米全面屏手势返回UI样式

    1.概述 在app开发中,最近有功能要求仿小米全面屏左右手势返回样式做手势返回的UI样式定制,所以就需要了解相关功能然后开发,在android系统api可以中用贝塞尔曲线实现相关的功能 效果图: 2. ...

  9. android小米全面屏屏幕高度,小米众筹一款新的全面屏手机,小尺寸屏幕仅为5.05英寸,内置小爱同学玩转丰富...

    小米众筹一款新的全面屏手机,小尺寸屏幕仅为5.05英寸,内置小爱同学玩转丰富 2019-07-30 03:09:10 34点赞 23收藏 48评论 智能手机在大屏尺寸路上越走越远,各大手机厂商在全面屏 ...

最新文章

  1. 机器学习热码one hot python
  2. CodeForces 558A,B
  3. 前端学习(1670):前端系列实战课程之核心运动原理
  4. 2019牛客多校四 E. triples II (容斥)
  5. matlab实现将彩色图像(R,G,B)色分量的直方图匹配,并计算其相关性
  6. 【Flask】通过Flask_login实现用户登录
  7. Android项目中JNI技术生成并调用.so动态库实现详解
  8. 论文写作——小白如何写好并投稿自己的第一篇英文论文?
  9. 母函数与指数型母函数模板
  10. 好男07演唱会将开唱 劲歌热舞点燃盛夏激情
  11. vue开发当中移动端中css常用相对单位
  12. python 遍历目录
  13. Vue + Element + Table 分页选择勾选 和取消勾选的问题
  14. 《了不起的盖茨比》中体现的人生观、价值观、爱情观
  15. 嵌入式系统导论(彭蔓蔓等·人民邮电出版社)课后习题答案
  16. iview解决打包后icon不显示问题
  17. SFP DDM接口的测量值计算
  18. java 字符串判空_java判断字符串String是否为空问题浅析
  19. vue:配置其他ip地址进行跨域
  20. php源生curl对接paypal

热门文章

  1. 程序员在互联网创业公司工作五年是一种怎样的体验?
  2. 纯英文拼音交流1声应该表示成0,要不就不知道怎么发音
  3. 前端和后端哪个工资高?前端工程师的工资,比后端低吗?
  4. 本文是关于前端开发基本流程的分享
  5. 人人都来写算法 之 插入排序
  6. 在EXCEL表格中如何快速换行
  7. asc速度慢 mysql_按desc排序的mysql速度很快,但asc速度很慢
  8. Kinect for Unity3d----KinectManager
  9. Openlayers笔记之图片偏移的完整解决方案
  10. Excel无法跨表筛选,也不能多列筛选,要如何突破限制呢?本教材有方法