我正在编写一个带有透明导航栏的Android应用。要相应地调整布局,我需要知道设备是否具有软件或硬件按钮。
在研究期间,我遇到了以下解决方案:
boolean hasMenuKey = ViewConfiguration.get(context).hasPermanentMenuKey();
这种方法不适用于某些新设备,例如Samsung Note 4或HTC One,它们没有菜单键,但仍然具有硬件按钮。
boolean hasBackKey = KeyCharacterMap.deviceHasKey(KeyEvent.KEYCODE_BACK);
boolean hasHomeKey = KeyCharacterMap.deviceHasKey(KeyEvent.KEYCODE_HOME);
boolean hasHardwareButtons = hasBackKey && hasHomeKey;
这不太好用,因为某些设备(如Sony Xperia Z3 Compact)虽然具有软件导航栏,但返回true。
有没有可靠的方法来找出是否存在物理按钮或软件导航栏?
最佳答案
参见this answer。您可以获取显示器的实际高度(以像素为单位),然后获取应用程序可用的高度,并确定设备是否具有带有这些值的屏幕导航栏。