Android 检查设备是否存在 导航栏 NavigationBar
http://blog.csdn.NET/lnb333666/article/details/41821149
目前也沒有可靠的方法來檢查設(shè)備上是否有導(dǎo)航欄??梢允褂肒eyCharacterMap.deviceHasKey來檢查設(shè)備上是否有某些物理鍵,比如說菜單鍵、返回鍵、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;}上面這段代碼,在絕大多數(shù)情況下都能獲取到NavigationBar的高度。所以有人想通過這個高度來判斷是否有NavigationBar 是不行的。當(dāng)然4.0版本以下就不用說了。確認個問題,NavigationBar是4.0以上才有么?
因為設(shè)備有物理鍵仍然可以有一個導(dǎo)航欄。任何設(shè)備運行自定義rom時都會設(shè)置一個選項,是否禁用的物理鍵,并添加一個導(dǎo)航欄??纯碅PI:
ViewConfiguration.get(Context context).hasPermanentMenuKey() ?有這么一句描述 :Report if the device has a permanent menu key available to the user(報告如果設(shè)備有一個永久的菜單主要提供給用戶).
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(查詢框架是否存在任何物理鍵盤的任何鍵盤連接到設(shè)備生產(chǎn)給出關(guān)鍵代碼的能力。).
那么解決的辦法就是:
@SuppressLint("NewApi") public static boolean checkDeviceHasNavigationBar(Context activity) {//通過判斷設(shè)備是否有返回鍵、菜單鍵(不是虛擬鍵,是手機屏幕外的按鍵)來確定是否有navigation barboolean hasMenuKey = ViewConfiguration.get(activity).hasPermanentMenuKey();boolean hasBackKey = KeyCharacterMap.deviceHasKey(KeyEvent.KEYCODE_BACK);if (!hasMenuKey && !hasBackKey) {// 做任何你需要做的,這個設(shè)備有一個導(dǎo)航欄return true;}return false;}?
總結(jié)
以上是生活随笔為你收集整理的Android 检查设备是否存在 导航栏 NavigationBar的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 4.Nginx配置进阶(四)
- 下一篇: 电费结算