http://blog.csdn.NET/lnb333666/article/details/41821149

目前也没有可靠的方法来检查设备上是否有导航栏。可以使用KeyCharacterMap.deviceHasKey来检查设备上是否有某些物理键,比如说菜单键、返回键、Home键。然后我们可以通过存在物理键与否来判断是否有NavigationBar(一般来说手机上物理键、NavigationBar共存).

public static int getNavigationBarHeight(Activity activity) {Resources resources = activity.getResources();int resourceId = resources.getIdentifier("navigation_bar_height","dimen", "android");//获取NavigationBar的高度int height = resources.getDimensionPixelSize(resourceId);return height;}

上面这段代码,在绝大多数情况下都能获取到NavigationBar的高度。所以有人想通过这个高度来判断是否有NavigationBar 是不行的。当然4.0版本以下就不用说了。确认个问题,NavigationBar是4.0以上才有么?

因为设备有物理键仍然可以有一个导航栏。任何设备运行自定义rom时都会设置一个选项,是否禁用的物理键,并添加一个导航栏。看看API:

ViewConfiguration.get(Context context).hasPermanentMenuKey()  有这么一句描述 :Report if the device has a permanent menu key available to the user(报告如果设备有一个永久的菜单主要提供给用户).

Android.view.KeyCharacterMap.deviceHasKey(int keyCode) 的描述:Queries the framework about whether any physical keys exist on the any keyboard attached to the device that are capable of producing the given key code(查询框架是否存在任何物理键盘的任何键盘连接到设备生产给出关键代码的能力。).

那么解决的办法就是:

@SuppressLint("NewApi") public static boolean checkDeviceHasNavigationBar(Context activity) {//通过判断设备是否有返回键、菜单键(不是虚拟键,是手机屏幕外的按键)来确定是否有navigation barboolean hasMenuKey = ViewConfiguration.get(activity).hasPermanentMenuKey();boolean hasBackKey = KeyCharacterMap.deviceHasKey(KeyEvent.KEYCODE_BACK);if (!hasMenuKey && !hasBackKey) {// 做任何你需要做的,这个设备有一个导航栏return true;}return false;}

Android 检查设备是否存在 导航栏 NavigationBar相关推荐

  1. Android中隐藏底部导航栏NavigationBar,以及修改NavigationBar按键颜色及NavigationBar背景颜色。

    一:把NavigationBa隐藏掉 Window window = getWindow();   WindowManager.LayoutParams params = window.getAttr ...

  2. Android系统开启导航栏NavigationBar(虚拟按键)

    导航栏NavigationBar 源码部分: frameworks/base/services/core/java/com/android/server/policy/PhoneWindowManag ...

  3. Android隐藏状态栏、导航栏

    Android隐藏状态栏.导航栏 [java] view plaincopy private void hideStatusNavigationBar(){ if(Build.VERSION.SDK_ ...

  4. 基于CarSystemUI实现左侧导航栏NavigationBar及下拉面板定制开发1——Android10智能座舱

    文章目录 前言 一.需求说明 二.修改方案 1.基于需求的两种设计构想 2.修改正确的高度及宽度 三.CarSystemUI 1.CarOS框架关于CarSystemUI的介绍 2.替换CarSyst ...

  5. 20220414在MT6739的Android10系统下开启导航栏NavigationBar(虚拟按键)

    20220414在MT6739的Android10系统下开启导航栏NavigationBar(虚拟按键) 2022/4/14 18:00 导航栏NavigationBar 1.源码部分: framew ...

  6. android仿微信的activity平滑水平切换动画,Android实现简单底部导航栏 Android仿微信滑动切换效果...

    Android实现简单底部导航栏 Android仿微信滑动切换效果 发布时间:2020-10-09 19:48:00 来源:脚本之家 阅读:96 作者:丶白泽 Android仿微信滑动切换最终实现效果 ...

  7. 史上最完美的Android沉浸式状态导航栏攻略

    前言 最近我在小破站开发一款新App,叫高能链.我是一个完美主义者,所以不管对架构还是UI,我都是比较抠细节的,在状态栏和导航栏沉浸式这一块,我还是踩了挺多坑,费了挺多精力的.这次我将我踩坑,适配各机 ...

  8. Android获取顶部状态栏statusBar高度、底部导航栏navigationBar高度

    手机顶部显示时间.电量等信息的叫状态栏,即statusBar 有些手机比如华为在底部会有返回.回到主页面等虚拟功能键,这是导航栏,即navigationBar 下面列出一些项目中常用的功能代码? 嘻嘻 ...

  9. android微信顶端导航栏,navigation-bar

    小程序组件 navigation-bar 小程序自定义导航栏适配 完美解决内容上下不居中问题 Navigation Navigation 是小程序的顶部导航组件,当页面配置 navigationSty ...

最新文章

  1. 【回顾】紫丁香一队的故事
  2. 最爱莫乎生命,其次是“你”
  3. java 浮点数精度_Java中浮点数精度问题
  4. Excel中R1C1引用样式
  5. 艾伦图灵_Java英雄:丹·艾伦
  6. 质问微软 WP8.1开发HTTPS 真费劲
  7. 定时器取数据时实时进来的数据_Redis-数据淘汰策略amp;持久化方式(RDB/AOF)amp;Redis与Memcached区别...
  8. Hexo 博客添加 README.md 以及部署到 GitHub 丢失/显示不正常解决方法
  9. java mongocollection_MongoDb完结笔记-与java结合
  10. jsonp 使用选择器
  11. java 中的radix_线程“main”中的异常java.lang.NumberFormatException:Radix超出范围
  12. Dubbo源码解析之SPI(一):扩展类的加载过程
  13. 第四轮学科评估计算机专业排名,第四轮学科评估
  14. win10无法修改mac地址_电脑MAC地址(物理地址)修改方法
  15. java事务_Java 事务详解
  16. 数字舵机和模拟舵机的区别
  17. 哪些地方需要使用到301转向
  18. Unity Shader入门精要第七章 基础纹理之遮罩纹理
  19. 总结27 -- E45: ‘readonly‘ option is set (add ! to override)
  20. TensorRT报错的一百种姿势 | 【❤️TensorRT抱错砖家❤️】

热门文章

  1. TCGA免疫浸润评价数据库,TIMER 2.0 使用指南
  2. JDBC(一)——statement对象、PreparedStatement对象
  3. ArcGIS Server 10.2 安装教程
  4. MATLAB学习(一)
  5. 计算机视觉与深度学习 | 基于DNN神经网络实现人的年龄及性别预测(代码类)
  6. LeetCode每日训练2—有序矩阵中第K小的元素(7.2)
  7. 数据结构学习笔记(三):队列(queue)
  8. vc udp 广播接收和发送_UDP编程与DatagramSocket类:UDP的套接字
  9. C++ 关键字 extern
  10. 编译与解释实践(1)-flex and bison 配置安装