我正在尝试检测运行我的应用程序的设备是否有缺口。
这有我需要的,但我无法在 WindowInset 类中找到 getDisplayCutout() 的 Xamarin 等效项。
我正在尝试检测运行我的应用程序的设备是否有缺口。
这有我需要的,但我无法在 WindowInset 类中找到 getDisplayCutout() 的 Xamarin 等效项。
本机 Android 和 Xamarin.Android 之间存在一些差异。
在您的情况下,Xamarin.Android 中的方法getDisplayCutout()是名为DisplayCutout的只读属性。
public DisplayCutout DisplayCutout { get; }
你可以像访问它
Android.Views.WindowInsets window = new WindowInsets(cpoySrc);
var Cutout = window.DisplayCutout;
cpoySrc 是一个源 WindowInsets。检查https://docs.microsoft.com/en-us/dotnet/api/android.views.windowinsets.-ctor?view=xamarin-android-sdk-9
我设法通过测量状态栏的大小并将其与已知/安全阈值进行比较来“解决”这个问题。
不会声称这是解决这个问题的最佳解决方案,但它与我迄今为止测试过的设备相得益彰。
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);
}