Мне удалось «решить» эту проблему, измерив размер строки состояния и сравнив ее с известным / безопасным порогом.
Не буду утверждать, что это лучшее решение этого вопроса, но оно не подходит для устройств, которые я тестировал до сих пор.
private const int __NOTCH_SIZE_THRESHHOLD = 40; //dp
/// <summary>
/// Device has a notched display (or not)
/// </summary>
public bool HasNotch
{
get
{
// The 'solution' is to measure the size of the status bar; on devices without a notch, it returns 24dp.. on devices with a notch, it should be > __NOTCH_SIZE_THRESHHOLD (tested on emulator / S10)
int id = MainActivity.Current.Resources.GetIdentifier("status_bar_height", "dimen", "android");
if (id > 0)
{
int height = MainActivity.Current.Resources.GetDimensionPixelSize(id);
if (pxToDp(height) > __NOTCH_SIZE_THRESHHOLD)
return true;
}
return false;
}
}
/// <summary>
/// Helper method to convert PX to DP
/// </summary>
private int pxToDp(int px)
{
return (int)(px / Android.App.Application.Context.Resources.DisplayMetrics.Density);
}