Xamarin (Android):检测设备是否有显示缺口
Xamarin (Android): Detect if the device has a display notch or not
我正在尝试检测 运行 我的应用所在的设备是否有缺口。
This 有我需要的东西,但我无法在 WindowInset class 中找到与 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
我通过测量状态栏的大小并将其与 known/safe 阈值进行比较,设法 'solve' 这个问题。
不会声称这是该问题的最佳解决方案,但它与我目前测试过的设备相抗衡。
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);
}
我正在尝试检测 运行 我的应用所在的设备是否有缺口。
This 有我需要的东西,但我无法在 WindowInset class 中找到与 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
我通过测量状态栏的大小并将其与 known/safe 阈值进行比较,设法 'solve' 这个问题。
不会声称这是该问题的最佳解决方案,但它与我目前测试过的设备相抗衡。
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);
}