尊重原创、尊重作者,转载请标明出处:

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

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

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

上面这段代码,在绝大多数情况下都能获取到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(查询框架是否存在任何物理键盘的任何键盘连接到设备生产给出关键代码的能力。).

那么解决的办法就是:

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

Android 检查设备是否存在 导航栏 NavigationBar的更多相关文章

  1. Android 修改底部导航栏navigationbar的颜色

    Android 修改底部导航栏navigationbar的颜色 getWindow().setNavigationBarColor(Color.BLUE); //写法一 getWindow().set ...

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

    Android隐藏状态栏.导航栏 private void hideStatusNavigationBar(){ if(Build.VERSION.SDK_INT<16){ this.getWi ...

  3. [置顶] xamarin android Fragment实现底部导航栏

    前段时间写了篇关于Fragment的文章,介绍了基础的概念,用静态和动态的方式加载Fragment  Xamarin Android Fragment的两种加载方式.下面的这个例子介绍xamarin ...

  4. iOS导航栏NavigationBar的颜色,按钮和标题以及字体颜色

    首先,层级关系: leftBarButtonItem.rightBarButtonItem.title都是加在UINavigationItem上的,UINavigationItem再加在Navigat ...

  5. 小程序开发-页面导航栏navigation-bar组件

    导航栏navigation-bar 页面导航条配置节点,用于指定导航栏的一些属性.只能是 page-meta 组件内的第一个节点,需要配合它一同使用. 通过这个节点可以获得类似于调用 wx.setNa ...

  6. ios 实现自定义状态栏StatusBar 和 导航栏navigationBar 的状态和颜色

    很多app中可以看到不同与导航栏的状态栏的颜色,他妈的真绕嘴. 一.更改状态栏颜色 (StatusBar) 就是比如导航栏是红色的状态栏是绿色的. 要实现这样的效果其实很简单,就是添加一个背景view ...

  7. 取消导航栏navigationBar的半透明/毛玻璃效果

    iOS 7.0以上的系统,导航栏默认有毛玻璃效果,遮住了颜色 原因是7.0以上的系统,导航栏默认有毛玻璃效果,遮住了颜色,取消掉这个效果就行了. if( ([[[UIDevice currentDev ...

  8. Android UI-仿微信底部导航栏布局

    现在App基本的标配除了侧滑菜单,还有一个就是底部导航栏,常见的聊天工具QQ,微信,购物App都有底部导航栏,用户可以随便切换看不同的内容,说是情怀也好,用户体验也罢.我们开发的主要的还是讲的是如何如 ...

  9. Android 动态隐藏显示导航栏,状态栏

    Talk is cheap, show me the code. --Linus Torvalds Okay, here: 一.导航栏: [java] view plain copy private  ...

随机推荐

  1. 转 在SQL Server中创建用户角色及授权(使用SQL语句)

     目录 要想成功访问 SQL Server 数据库中的数据 我们需要两个方面的授权 完整的代码示例 使用存储过程来完成用户创建 实例 要想成功访问 SQL Server 数据库中的数据, 我们需要两个 ...

  2. hdu 4857 逃生

    题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=4857 逃生 Description 糟糕的事情发生啦,现在大家都忙着逃命.但是逃命的通道很窄,大家只能 ...

  3. Mysql 更改最大连接数

    方法一: 进入MySQL安装目录 打开MySQL配置文件 my.ini 或 my.cnf查找 max_connections=100 修改为 max_connections=1000 服务里重起MyS ...

  4. Swift计算文本宽高

    iOS 8 开始可以配合 AutoLayout 自动估算文本的高度,但是当 Cell 比较复杂的时候,还会需要手动去计算.首先声明一个样式 var TextStyle : [String : NSOb ...

  5. Resizing the View(待续。。。。)

    在iOS开发的过程中,控件的大小和位置如何去安排是一个现在看来比较麻烦的事情,需要从上到下的通知和从下到上的调整.而这部分在整个开发过程中是比较重要的,但是却经常没有被掌握.如果将这部分掌握,不管界面 ...

  6. 条款11:在operator=中处理“自我赋值”

    什么是自我赋值,就是 v = v 这种类型的语句,也许很多人都会说鄙视这种写法,但是如下的写法会不会出现呢? 比如:a[i] = a[j];      // 不巧的是i可能和j相等 *px = *py ...

  7. SQL 执行顺序

    SQL 是一种声明式语言,与其他语言相比它的最大特点是执行顺序-并非按照语法顺序来执行.因此很多程序猿看到SQL就头疼,我之前也是这样,后来看到一篇文章后豁然开朗-地址. 理解了SQL的执行顺序无疑对 ...

  8. 使用git客户端获取shiro

    1.进入下载的目标文件夹右键( Git Bash Here )

  9. “我爱淘”冲刺阶段Scrum站立会议1

    昨天是我们项目冲刺阶段的第一天,站立会议的内容如下: 1.昨天完成了项目中的第一个界面--“精选”界面:完成了一点Java文件的编写: 2.今天的任务就是完成第一个Activity的编写:将布局文件和 ...

  10. 文本阴影text-shadow

    文本阴影text-shadow text-shadow可以用来设置文本的阴影效果. 语法: text-shadow: X-Offset Y-Offset blur color; X-Offset:表示 ...