2016-08-23 61 views
0

我正在使用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 

然而,這並沒有物理導航按鈕,但軟導航欄,(的Nexus 4)的設備上,該方法返回意外(我)結果:

384dp x 592dp in portrait mode 
598dp x 384dp in landscape mode 

它本身Nexus的ems結果允許48dp用於縱向模式下的軟導航欄,42dp用於橫向模式。

我想使用全屏 - 如果設備有一個軟導航欄我想隱藏它並使用該空間。我可以隱藏軟導航欄,但我需要能夠檢測實際的屏幕尺寸(例如Nexus 4的384dp x 640dp),或者設備是否有軟導航欄(最好是其大小),所以我可以調整隱藏時可用的額外空間。

我見過幾個計算器回答的問題對Java有類似代碼:

public boolean hasNavBar (Resources resources) 
{ 
    int id = resources.getIdentifier("config_showNavigationBar", "bool", "android"); 
    return id > 0 && resources.getBoolean(id); 
} 

,但我無法找到C#/ Xamarin等同。

任何幫助表示讚賞。

回答

0

C#版本:

public bool hasNavBar(Resources resources) 
{ 
    int id = resources.GetIdentifier("config_showNavigationBar", "bool", "android"); 
    return id > 0 && resources.GetBoolean(id); 
} 
+0

謝謝你 - 感激。 – JeffR