码迷,mamicode.com
首页 > 移动开发 > 详细

Android 检查设备是否存在 导航栏 NavigationBar

时间:2014-12-09 15:21:07      阅读:164      评论:0      收藏:0      [点我收藏+]

标签:android   blog   http   io   ar   使用   sp   for   java   

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

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.   
    4.         //通过判断设备是否有返回键、菜单键(不是虚拟键,是手机屏幕外的按键)来确定是否有navigation bar  
    5.         boolean hasMenuKey = ViewConfiguration.get(activity)  
    6.                 .hasPermanentMenuKey();  
    7.         boolean hasBackKey = KeyCharacterMap  
    8.                 .deviceHasKey(KeyEvent.KEYCODE_BACK);  
    9.   
    10.         if (!hasMenuKey && !hasBackKey) {  
    11.             // 做任何你需要做的,这个设备有一个导航栏  
    12.             return true;  
    13.         }  
    14.         return false;  
    15.     }  

Android 检查设备是否存在 导航栏 NavigationBar

标签:android   blog   http   io   ar   使用   sp   for   java   

原文地址:http://www.cnblogs.com/sage-blog/p/4153241.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!