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

时间:2016-08-23 08:34:37

标签: c# android xamarin

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

var metrics = Resources.DisplayMetrics;
int widthInDp = metrics.WidthPixels / Resources.DisplayMetrics.Density;
int heightInDp = metrics.HeightPixels / Resources.DisplayMetrics.Density;

在具有物理导航按钮且没有软导航栏的设备(Samsung SM-E7000)上,此方法会返回预期结果:

360dp x 640dp in portrait mode
640dp x 360dp in landscape mode

但是,在没有物理导航按钮但具有软导航栏(Nexus 4)的设备上,此方法会返回意外(对我而言)结果:

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的等价物。

任何帮助表示感谢。

1 个答案:

答案 0 :(得分:0)

C#版本:

GetDictionary()