C# 使用软导航栏正确检测屏幕大小

C# 使用软导航栏正确检测屏幕大小,c#,android,xamarin,C#,Android,Xamarin,我正在用Xamarin开发一个C#应用程序。我使用以下代码检测设备屏幕大小: var metrics = Resources.DisplayMetrics; int widthInDp = metrics.WidthPixels / Resources.DisplayMetrics.Density; int heightInDp = metrics.HeightPixels / Resources.DisplayMetrics.Density; 在具有物理导航按钮且没有软导航栏(三星SM-E7

我正在用Xamarin开发一个C#应用程序。我使用以下代码检测设备屏幕大小:

var metrics = Resources.DisplayMetrics;
int widthInDp = metrics.WidthPixels / Resources.DisplayMetrics.Density;
int heightInDp = metrics.HeightPixels / Resources.DisplayMetrics.Density;
在具有物理导航按钮且没有软导航栏(三星SM-E7000)的设备上,此方法返回预期结果:

360dp x 640dp in portrait mode
640dp x 360dp in landscape mode
384dp x 592dp in portrait mode
598dp x 384dp in landscape mode
但是,在没有物理导航按钮但具有软导航栏(Nexus 4)的设备上,此方法会返回(我)意外的结果:

360dp x 640dp in portrait mode
640dp x 360dp in landscape mode
384dp x 592dp in portrait mode
598dp x 384dp in landscape mode
Nexus的结果似乎允许在纵向模式下软导航栏使用48dp,在横向模式下使用42dp

我想使用全屏-如果设备有一个软导航栏,我想隐藏它并使用空间。我可以隐藏软导航栏,但我需要能够检测实际屏幕大小(如Nexus 4的384dp x 640dp),或者设备是否有软导航栏(最好是其大小),以便在隐藏时调整可用的额外空间

我已经看到了一些针对Java的stackoverflow问题的答案,代码类似于:

public boolean hasNavBar (Resources resources)
{
    int id = resources.getIdentifier("config_showNavigationBar", "bool", "android");
    return id > 0 && resources.getBoolean(id);
}
但我找不到C#/Xamarin的等价物

感谢您的帮助。

C#版本:

C版本:


谢谢-谢谢。谢谢-谢谢。