如何定位带和不带软导航键的设备(即:Nexus 5、Galaxy S4)?

How to target devices with and without soft navigation keys (ie: Nexus 5, Galaxy S4)?

我到处寻找没有成功的答案。我正在使用 values-xxhdpi 文件夹为 nexus 5 设置我的应用程序布局尺寸,但是当我切换到 galaxy S4 模拟器(相同分辨率但没有软导航键)时,布局不再正常。

有没有办法定位具有相同分辨率的设备,无论是否有屏幕底部的软导航?

谢谢!

您可以检测设备是否具有硬件菜单键(可用于实现此目的的方法,例如 here 中描述)并自行应用一组不同的资源。

没有办法做到这一点 "automatically" 例如,通过强制应用程序使用不同的 drawable 文件夹。

使用:

ViewConfiguration.hasPermanentMenuKey()

注意 这仅适用于 SDK >= 14

已编辑:

boolean hasBackKey = KeyCharacterMap.deviceHasKey(KeyEvent.KEYCODE_BACK);
boolean hasHomeKey = KeyCharacterMap.deviceHasKey(KeyEvent.KEYCODE_HOME);

if (hasBackKey && hasHomeKey) {
    // no navigation bar, unless it is enabled in the settings
} else {
    // 99% sure there's a navigation bar
}